我有一个模块,在其配置中使用我需要模拟的提供程序。
提供者本身有register
函数,它接受2个参数和$get
函数返回一个对象,但这并不重要(我认为)因为我嘲笑它无论如何。以防here's the entire provider
模块使用这样的提供程序:
angular.module('replenishment').config(configureReplenishmentColumnDef);
configureReplenishmentColumnDef.$inject = ['columnDefProvider'];
function configureReplenishmentColumnDef(columnDefProvider) {
let config = {
matchWhen: ((schema)=> _.get(schema, 'format') === 'replenishment'),
$get: replenishmentColDef
};
columnDefProvider.register(config);
}
replenishmentColDef.$inject = ['$q', 'schema', 'medData'];
function replenishmentColDef($q, schema, medData) {
....
}
我开始整理像这样的规范(我们用CoffeeScript编写的测试)
describe 'replenishment-module', ->
columnDefProvider = undefined
beforeEach ->
module ($provide)->
$provide.provider 'columnDef', ->
@.register = sinon.spy()
@.$get = sinon.spy()
return // had to put an explicit return here, as @DTing suggested
module 'replenishment'
inject ->
现在我不知道如何正确模拟提供商的方法。你们可以告诉我,也许我需要使用存根而不是间谍。
答案 0 :(得分:1)
尝试添加这样的explict返回,我认为你得到了一个格式错误的函数:
describe 'replenishment-module', ->
columnDefProvider = undefined
beforeEach ->
module ($provide)->
$provide.provider 'columnDef', ->
@.register = sinon.spy()
@.$get = sinon.spy()
return
module 'replenishment'
inject ->
我认为这就是你的javascript等价物:
beforeEach(function() {
module(function($provide) {
return $provide.provider('columnDef', function() {
this.register = sinon.spy();
return this.$get = sinon.spy();
});
});
这会使你的提供者columnDef没有$ get工厂方法:
function Something() {
return this.get = function() {
console.log("get");
};
}
var something = new Something();
something.get();