我提供了一项非常简单的服务,以便在测试时检查我的理智。这是:
(function() {
'use strict';
angular
.module('app')
.service('TestService', TestService);
function TestService() {
function foo() {
bar();
}
function bar() {
console.log('Hello world!');
}
return {
foo: foo,
bar: bar
};
}
}());
所以这里没什么复杂的 - foo()调用bar(),它输出一个简单的“Hello World'消息到控制台。我对此的测试看起来像这样:
(function() {
'use strict';
fdescribe('test.service',function() {
var testService;
beforeEach(module('app'));
beforeEach(inject(function(_TestService_) {
testService = _TestService_;
}));
describe('setup',function() {
it('should get the testService',function() {
expect(testService).not.toBe(undefined);
});
});
describe('foo()',function() {
fit('should call bar',function() {
spyOn(testService,'bar');
testService.foo();
expect(testService.bar).toHaveBeenCalled();
});
});
});
}());
我在这里所做的就是通过常规方法查看foo调用栏,即监视吧。但这给了我错误:
Expected spy bar to have been called
我拉着我的头发试图弄清楚这一点,因为这不是一件复杂的事情 - 我从根本上做错了什么?
谢谢!
答案 0 :(得分:1)
我想我知道问题是什么。
当您监视testService, 'bar'
时,jasmine将使用间谍替换testService
上的“bar”属性,但是在内部,您的服务foo()
没有引用testService
对象,因此因此它永远不能称之为间谍。
试试这个:
(function() {
'use strict';
angular
.module('app')
.service('TestService', TestService);
function TestService() {
var service = {};
service.foo = function() {
service.bar();
};
service.bar = function() {
console.log('Hello world!');
};
return service;
}
}());