Издеваться над провайдером

У меня есть модуль, который в своей конфигурации использует поставщика, который мне нужно издеваться.

сам провайдер имеет 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();

Другие вопросы по тегам