Angular的依赖注入框架允许注入模拟对象用于测试目的。注入器会在注入之前自动实例化传递给它的对象,那么如何使用间谍记录我的代码的内部工作原理?
例如,在下面的测试中,我将MockTransactionModel
传递到我测试的系统中。然后,我希望声明description
字段等于请求主体中的相同字段(我已经嘲笑过),但是,因为DI框架正在创建{{1}的实例在注入它之前,我没有引用传递给MockTransactionModel
的实际对象。
sut
在一句话中,我想我的问题是:我怎样才能引用DI框架实例化的对象?我知道我可以简单地手动注入我的依赖项,但我觉得这有点否定了引入DI框架。
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);
});
});
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
}
}