【发布时间】:2017-06-10 03:52:33
【问题描述】:
我有一个这样的示例路线:
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;
});
}
}
});
.....
这只是一个测试 URL,我可以在线获取示例 JSON 数据
https://jsonplaceholder.typicode.com/posts/1
我想测试一下状态。
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": "..."
});
但这失败了。话说
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)
我做错了什么?
更新
console.log(angular.mock.dump($scope)); 给出以下内容
请帮忙。
【问题讨论】:
-
我认为您提出的原始问题(在编辑之前)具有原始错误的价值。这个新的错误信息应该是一个新问题。它们都是两个独立的问题,应该单独处理。
-
我不明白你想在这里测试什么。我的意思是:测试应该检查您的代码是否正在执行您期望它执行的某些逻辑。但是相反(据我所知)您的测试检查您是否可以从某些请求中获取一些 json。那不是测试的目的。可能是服务器端测试的好目的。相反,我建议您在“resolve”中调用一些服务(只需通过注入一些服务并调用其方法之一来替换 $http 调用),现在您可以测试是否调用服务以响应“state.go”,并且如果使用正确的参数调用服务。 (这是我的看法)
标签: javascript angularjs unit-testing karma-jasmine