【问题标题】:Sinon to stub AngularJS service in TestsSinon 在测试中存根 AngularJS 服务
【发布时间】:2014-07-16 20:18:05
【问题描述】:

而不是像这样手动创建模拟服务:

var mockService = { GetData: function() { deferred = $q.defer(); return deferred.promise; }

然后将其添加到我的 $controller 注入中,例如:

$controller('mycontroller', { $scope: scope, myService: mockService });

如何使用 Sinon 将我的真实服务存根,并将该存根服务注入到上面的控制器中“mockService”被注入的位置?我想删除我的真实服务,以防我的服务方法被重命名,然后我的控制器测试将与我的服务测试一起失败。

在此先感谢,我希望这是有道理的。

【问题讨论】:

    标签: angularjs testing sinon


    【解决方案1】:

    您不会删除整个服务,而是删除要声明的服务上的方法。因此,您让 angular 正常进行注入,然后将方法存根到您从 $injector 获得的服务上,即您不必做任何时髦的事情,因为服务是单个测试范围内的单例。

    我总是创建一个 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);
            });
        });
    });
    

    【讨论】:

    • 只是为上述解决方案添加注释,一个 sinon 存根具有间谍的所有固有属性
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多