【发布时间】:2015-03-20 03:58:12
【问题描述】:
我一直在尝试开始使用 karma 和 jasmine 进行 angular 单元测试,并且我一直在努力思考如何测试具有依赖关系的控制器。我尝试使用 jasmine spyObj 模拟间谍并将其注册到 beforeEach 挂钩中,但由于某种原因无法识别间谍。
代码如下:
angular.module('testModule', [])
.controller('TestController', [
'$scope',
'TestService',
function ($scope, TestService) {
$scope.data = TestService.load();
}])
.factory('TestService', function () {
return {
load: function(){
return "foo";
}
}
});
这是测试
describe('TestController', function() {
var $controller, $scope, TestService;
beforeEach(module('testModule'), function($provide){
TestService = jasmine.createSpyObj("TestService", ["load"]);
TestService.load.andReturn("bar");
$provide.value("TestService", TestService)
});
beforeEach(inject(function(_$controller_, $rootScope, _TestService_) {
$scope = $rootScope.$new();
TestService = _TestService_;
$controller = _$controller_('TestController', {
$scope: $scope,
TestService: TestService
});
}));
it('should set $scope.data to bar when TestService.load is called', function() {
expect(TestService.load).toHaveBeenCalled();
expect($scope.data).toEqual("bar");
}); });
测试中的两个断言都失败了。
当我调用 expect(TestService.load).toHaveBeenCalled(); 时,我得到“错误:预期是间谍,但得到了函数”;
如果我调用 expect($scope.data).toEqual("bar"),我得到 Expected 'foo' to equal 'bar'。 “Foo”来自实际服务,而不是间谍对象。
感谢您的帮助。
【问题讨论】:
标签: angularjs unit-testing jasmine