Tôi có một tuyến đường mẫu như thế này:Angular JS Testing với Karma Jasmine
angular
.module('appRouter',['ui.router'])
.config(function($stateProvider,$urlRouterProvider){
$stateProvider
.....
.....
.state('settings.account',{
url:'/account',
templateUrl:'templates/account.html',
controller:function(resolveData){
console.log(resolveData);
},
resolve:{
resolveData : function($http){
var root = 'https://jsonplaceholder.typicode.com';
return $http.get(root+'/posts/1').then(function(response){
return response.data;
});
}
}
});
.....
Nó chỉ là một URL thử nghiệm nơi tôi có thể nhận được dữ liệu JSON mẫu trực tuyến
https://jsonplaceholder.typicode.com/posts/1
Tôi muốn kiểm tra trạng thái.
beforeEach(function(){
module('appRouter');
});
beforeEach(inject(function(_$rootScope_,_$injector_,_$state_,_$httpBackend_,$templateCache){
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$httpBackend = _$httpBackend_;
$templateCache.put('templates/account.html','');
}));
it('should resolve "resolveData"',function(){
const state = $state.get('settings.account');
const resolveFn = state.resolve.resolveData;
$httpBackend.whenGET('https://jsonplaceholder.typicode.com/posts/1').respond(function(){
return [
200,{
"userId": 1,
"id": 1,
"title": "...",
"body": "..."
}]
});
$httpBackend.expectGET('https://jsonplaceholder.typicode.com/posts/1');
$injector.invoke(resolveFn);
$httpBackend.flush();
expect($injector.annotate(resolveFn)).toEqual(['$http']);
console.log(angular.mock.dump($scope));
expect($scope.resolveData).toEqual({
"userId": 1,
"id": 1,
"title": "...",
"body": "..."
});
Nhưng điều này không thành công. Nói
1) should resolve "resolveData"
UI Routerer Config For Account
Expected undefined to equal Object({ userId: 1, id: 1, title: '...', body: '...' }).
at Object.<anonymous> (test/controllers/main-controller-spec.js:114:36)
Tôi đang làm gì sai?
CẬP NHẬT
console.log(angular.mock.dump($scope));
đưa ra sau
Xin vui lòng giúp.
Tôi nghĩ rằng có giá trị trong câu hỏi ban đầu bạn đã yêu cầu (trước khi chỉnh sửa), với lỗi ban đầu. Thông báo lỗi mới này sẽ là một câu hỏi mới.Cả hai đều là hai vấn đề riêng biệt, cần được xử lý riêng. –
tôi không hiểu chính xác những gì bạn đang cố gắng thử nghiệm ở đây. Tôi có nghĩa là: kiểm tra nên kiểm tra xem mã của bạn đang làm một số logic bạn mong đợi nó để làm. Nhưng thay vào đó (theo như tôi có thể thấy), kiểm tra của bạn sẽ kiểm tra xem bạn có thể lấy một số json từ một số yêu cầu hay không. Đó không phải là mục đích của các xét nghiệm. Có thể là mục đích tốt của các thử nghiệm phía máy chủ. Thay vào đó, tôi đề nghị bạn gọi một số dịch vụ bên trong "giải quyết" (chỉ cần thay thế cuộc gọi $ http bằng cách tiêm một số dịch vụ và gọi một trong các phương thức của nó), bây giờ bạn có thể kiểm tra dịch vụ ifs được gọi là "state.go" và nếu dịch vụ được gọi với thông số chính xác. (Thats ý kiến của tôi) – happyZZR1400