【发布时间】:2017-04-27 12:29:35
【问题描述】:
我需要以某种方式模拟 document 对象,以便能够对遗留的 TypeScript 类进行单元测试。该类导入另一个类 (View.ts),该类具有一个 3-rd 方模块的 import,而该类又导入了其他假设 document 存在的东西。
我的进口链:
controller.ts -> view.ts -> dragula -> crossvent -> 自定义事件
// Controller.ts:
import { View } from './View';
// View.ts:
const dragula = require('dragula');
// dragula requires crossvent, which requires custom-event, which does this:
module.exports = useNative() ? NativeCustomEvent :
'function' === typeof document.createEvent ? function CustomEvent (type, params) {
var e = document.createEvent('CustomEvent');
// ...
} : function CustomEvent (type, params) {
// ...
}
// controller.spec.ts:
import { Controller } from '../../src/Controller';
我得到的错误:
ReferenceError: 文档未定义
尝试用proxyquire 模拟View,如下所示:
beforeEach( () => {
viewStub = {};
let view:any = proxyquire('../../src/View', { 'View': viewStub });
viewStub.constructor = function():void { console.log('hello!'); };
});
我的问题是,由于 import 语句,甚至在 View 初始化之前就会弹出错误。
【问题讨论】:
标签: unit-testing typescript mocha.js proxyquire