gpt4 book ai didi

javascript - 在 Angular 单元测试中模拟 ngResource

转载 作者:数据小太阳 更新时间:2023-10-29 06:10:15 26 4
gpt4 key购买 nike

我有一个看起来像这样的 ngResourceMockFactory:

(function() {
'use strict';

angular.module('app')
.factory('NgResourceMock', ngResourceMockFactory)
;

ngResourceMockFactory.$inject = [];

function ngResourceMockFactory() {
function NgResourceMock() {
var context = this;

context.$promise.then = function() {
context.prototype.$promise.then.apply(context, arguments);
};

context.$promise.finally = function() {
context.prototype.$promise.finally.apply(context, arguments);
};
}

NgResourceMock.prototype.$promise = {
then: function(onSuccess, onError) {
this.$promise.onSuccess = onSuccess;
this.$promise.onError = onError;
},
finally: function(onComplete) {
this.$promise.onComplete = onComplete;
}
};

return NgResourceMock;
}
})();

我在 beforeEach 中将其注入(inject)到我的测试中,如下所示:

beforeEach(inject(function(NgResourceMock) {
ngResourceMock = new NgResourceMock();
}));

然后我这样使用它:

describe('initiateWorkflow function', function() {
beforeEach(function() {
vm.player = {id: 123};
spyOn(dataService, 'initiateWorkflow').and.returnValue(ngResourceMock);
vm.initiateWorkflow();
});

it('should call dataService.initiateWorkflow', function() {
expect(dataService.initiateWorkflow).toHaveBeenCalledWith({playerId: vm.player.id}, {});
});
});

但我一直看到以下错误:

TypeError: 'undefined' is not an object (evaluating 'context.prototype.$promise')

这让我相信我的 ngResourceMockFactory 有问题,但我不确定是什么。

最佳答案

不知道这是否有任何帮助,但如果您尝试评估测试中的异步操作,您可能需要使用 Jasmine 中的 done() 方法。

根据他们的文档:

beforeEach(function(done) {
setTimeout(function() {
value = 0;
done();
}, 1);
});

通过将 done 作为 beforeEach 回调的参数传递,在 before each 之后运行的任何测试都将等到 done() 函数已被调用。

来源:Jasmine (异步支持部分)。

希望这对您有所帮助。

关于javascript - 在 Angular 单元测试中模拟 ngResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com