使用Angular的di.js,如何记录传递给注射器的间谍的结果?

时间:2015-07-26 17:50:48

标签: javascript angularjs node.js unit-testing dependency-injection

Angular的依赖注入框架允许注入模拟对象用于测试目的。注入器会在注入之前自动实例化传递给它的对象,那么如何使用间谍记录我的代码的内部工作原理?

例如,在下面的测试中,我将MockTransactionModel传递到我测试的系统中。然后,我希望声明description字段等于请求主体中的相同字段(我已经嘲笑过),但是,因为DI框架正在创建{{1}的实例在注入它之前,我没有引用传递给MockTransactionModel的实际对象。

sut

在一句话中,我想我的问题是:我怎样才能引用DI框架实例化的对象?我知道我可以简单地手动注入我的依赖项,但我觉得这有点否定了引入DI框架。

MockTransactionModel

describe('adding transaction', function() {
  var sut;

  beforeEach(function() {
    var injector = new di.Injector([MockTransactionModel]);
    sut = injector.get(TransactionController);
  })

  it('should save the description from the request body', function() {
    sut.add(mockRequest, null);

    expect(MockTransactionModel().description).toBe(mockRequest.body.description);
  });
});

TransactionController(SUT)

module.exports = MockTransactionModel;

var TransactionModel = require('../../app/models/transaction.model');
var di = require('di');

di.annotate(MockTransactionModel, new di.Provide(TransactionModel));

function MockTransactionModel() {
  return {
    description: '',
    amount: 0
  }
}

0 个答案:

没有答案