Издеваться над провайдером
У меня есть модуль, который в своей конфигурации использует поставщика, который мне нужно издеваться.
сам провайдер имеет register
функция, которая принимает 2 аргумента и $get
функция, которая возвращает объект, но это не очень важно (я думаю), так как я все равно буду над ним издеваться. На всякий случай вот весь провайдер
Модуль использует провайдера следующим образом:
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 ->
Теперь я не знаю, как правильно издеваться над методами провайдера. Ребята, пожалуйста, покажите мне, может, мне нужно использовать заглушки вместо шпионов.
1 ответ
Попробуйте добавить явные возвраты вот так, я думаю, вы получаете некорректную функцию:
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();
});
});
что бы сделать так, чтобы ваш Provider columnDef не имел метода $get factory:
function Something() {
return this.get = function() {
console.log("get");
};
}
var something = new Something();
something.get();