【问题标题】:How can I return different values from a mocked method using AngularJS and Karma?如何从使用 AngularJS 和 Karma 的模拟方法返回不同的值?
【发布时间】:2016-01-28 15:50:11
【问题描述】:

我正在测试使用 ServiceB 的 ServiceA。 ServiceB 有一个名为 getData() 的方法,它有时返回 true,有时返回 false。服务 A 具有不同的逻辑,具体取决于 ServiceB 返回 true 还是 false,我需要测试这两种情况。目前,我正在像这样嘲笑 Service B:

beforeEach(angular.mock.module('app', function ($provide) {
    serviceB = {
        getData: function () {
           return true;
        }
    };

    $provide.value('serviceB', serviceB);
}));

那么我如何测试 serviceB 返回 true 时会发生什么,然后进行另一个测试以验证它返回 false 时的行为?我可以在 it() 方法中而不是在 beforeEach() 中创建模拟,以便让模拟在不同的测试方法中返回不同的值吗?

【问题讨论】:

    标签: angularjs karma-jasmine


    【解决方案1】:

    只需在您的个人测试中模拟它:

    beforeEach(...)
    it('test with true', inject(function (serviceB) {
        spyOn(seviceB, 'getData').and.callFake(function(){
            return true;
        });
    
        //... other test code
    
        expect(serviceB.getData).toHaveBeenCalled();
    }));
    it('test with false', inject(function (serviceB) {
        spyOn(seviceB, 'getData').and.callFake(function(){
            return false;
        });
    
        //... other test code
    
        expect(serviceB.getData).toHaveBeenCalled();
    }));
    

    【讨论】:

    • 谢谢,这正是我所需要的。完美运行!
    • 当我做这样的事情时,我收到一条错误消息:'错误:getData 已被监视'
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2017-09-12
    • 2017-09-04
    相关资源
    最近更新 更多