【发布时间】:2017-12-02 20:42:21
【问题描述】:
我们有一个 NodeJS 应用程序编写的 Typescript。 我们使用模块来导出几个函数,而不是对象。
一旦我们想在测试期间模拟这些函数,我们就使用mock-require
但是,代码变得非常难看。因为我们基本上需要
- 导入
mock-require - 构建我们的模拟和间谍
import {functionA,FunctionB} from "module-to-test"mock.reRequire("module-to-test")
代码看起来像这样:
// mocking require imports
import * as mock from "mock-require";
import {getMockUserObject} from "../../test/utils/mock-objects";
const user = getMockUserObject();
let userModelSpy;
// mock userModel
userModelSpy = jasmine.createSpyObj("userModelSpy", ["findOne"]);
userModelSpy.findOne.and.returnValue(Promise.resolve(user));
mock("../data-source/mongo-data-source", {userModel: userModelSpy});
// actual import statements
import {functionA,FunctionB} from "module-to-test";
// reRequire the module that we want to test
mock.reRequire("./mail.service");
有什么办法可以让它不那么难看吗?例如。保持进口在一起。 如果我们将模拟移动到 beforeEach 中,或者通常在实际要测试的模块的导入下,reRequire 不起作用,或者至少我们的模拟不会被调用。所以要测试的模块使用实际的依赖项而不是模拟的依赖项。
感谢您的意见!
【问题讨论】:
标签: node.js unit-testing typescript node-modules