【问题标题】:Jasmine Spy : Getting an error in returnValueJasmine Spy:在 returnValue 中出现错误
【发布时间】:2018-06-11 00:14:54
【问题描述】:

我正在尝试使用 jasmine spy 编写单元测试用例。以下是我的服务代码。

function reset(someParam) {
var deferred = $q.defer();

svcTypes.getTasksWithRoles().then(function (types) {
    if (types.HadError) return;

    // do some stuff..               

    deferred.resolve(results);
}, function (errorResponse) {
    deferred.reject(errorResponse);
});
return deferred.promise; }

下面是我的单元测试用例:

describe('tests for svcWorkordertypes', function () {

beforeEach(angular.mock.module('workorders.service'));
beforeEach(angular.mock.module('workordertypes.service'));


var svcWorkordertypes;
var svcTypes;
var $q, $httpBackend;
beforeEach(angular.mock.inject(function (_svcWorkordertypes_, _svcTypes_, _$q_, _$httpBackend_) {
    svcWorkordertypes = _svcWorkordertypes_;
    svcTypes = _svcTypes_;
    $q = _$q_;
    $httpBackend = _$httpBackend_;

}));

//This is working fine.
it('all controls should be set', function () {            
    expect(svcWorkordertypes).toBeDefined();
    expect(svcTypes).toBeDefined();
    expect($q).toBeDefined();
    expect($httpBackend).toBeDefined();

});

it('test reset method', function () {
    //Arrange
    var someParam = 'test';
    var types = [{ RoleList: 'newRoleList', isHeader: true, Roles: 'testRole' }];
    $httpBackend.when("GET", 'null/tasks/types?$select=IncludeRoles').respond(200, JSON.stringify(types));
    spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(function () {
        var deferred = $q.defer();
        deferred.resolve(JSON.stringify(types));
        return deferred.promise;
    });

    //Act
    var result = svcWorkordertypes.reset(selectedRoleName);


    //Assert
    result.then(function (res) {
        console.log(res + ' res output...');
        //expect(JSON.stringify(res)).toEqual(JSON.stringify(types));
    });
    //expect(svcTypes).toBeDefined();
}) });

以下是错误:

我也尝试了很多关于 callFake 的方法。我在stackoverflow 上发现了一个类似的问题,但对我没有帮助。

【问题讨论】:

    标签: javascript angularjs unit-testing jasmine karma-jasmine


    【解决方案1】:

    getTasksWithRoles 应该返回一个 Promise,它被模拟返回一个返回 Promise 的函数。

    应该是:

    spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(
      $q.resolve(JSON.stringify(types))
    );
    

    【讨论】:

    • 感谢 estus 的回复。现在,我没有收到那个错误。但是,它仍然在承诺中返回零对象。调试器没有进入“// do some stuff”代码。首先调试器转到“svcTypes.getTasksWithRoles()”,然后直接转到语句的末尾,即 return deferred.promise;.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2021-04-02
    • 2014-11-21
    • 1970-01-01
    • 2016-09-09
    • 2019-06-03
    相关资源
    最近更新 更多