而不是手动创建模拟服务,如:
var mockService = { GetData: function() { deferred = $q.defer(); return deferred.promise; }
然后将其添加到我的$ controller注入中,如:
$controller('mycontroller', { $scope: scope, myService: mockService });
如何使用Sinon存根我的实际服务并将该存根服务注入" mockService"正在注入我的控制器上面?如果我的服务方法被重命名,我的控制器测试将随着我的服务测试而失败,我想要发布我的真实服务。
提前致谢,我希望这是有道理的。
答案 0 :(得分:16)
您不会将整个服务存根,而不是您想要断言的服务上的方法。所以你让角度正常进行注射,然后将方法存在于你从$ injector注入的服务上,即你不必做任何质朴的事情,因为服务是单一测试范围内的单例。/ p>
我总是创建一个sinon沙箱并在其上模拟东西 - 然后在每次测试之后你可以恢复所有模拟的方法
var sandbox, myService, somethingUnderTest;
beforeEach(module('myModule'));
describe('something', function () {
beforeEach(inject(function ($injector) {
sandbox = sinon.sandbox.create();
myService = $injector.get('myService');
somethingUnderTest = $injector.get('somethingUnderTest');
}));
afterEach(function () {
sandbox.restore();
});
it('should be defined', function () {
expect(somethingUnderTest).to.exist;
});
describe('someMethod', function () {
it('should call the start method on myService', function () {
sandbox.stub(myService, 'start');
somethingUnderTest.start();
expect(myService.start.calledOnce).to.equal(true);
});
});
});