2

我有一个模块,在其配置中使用了我需要模拟的提供程序。

provider 本身具有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 ->

现在我不知道如何正确模拟提供者的方法。你们能告诉我吗,也许我需要使用存根而不是间谍。

4

1 回答 1

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 工厂方法:

function Something() {
  return this.get = function() {
    console.log("get");
  };
}

var something = new Something();
something.get();

于 2015-06-11T01:46:00.367 回答