0
我們有一個NodeJS應用程序書寫打字稿。 我們使用模塊來導出幾個函數,而不是對象。在Typescript&NodeJS中嘲笑模塊導出的最佳實踐
一旦我們想在測試過程中嘲笑這些功能,我們使用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不起作用,或者至少我們的嘲笑不會被調用。所以模塊測試使用的是實際的依賴關係而不是模擬的依賴關係。
感謝您的輸入!
嗨mingos。我從角度知道這種方法。但是如果一個人不想使用類,因爲它只是一堆功能(例如Express中的路由器)。我猜想,在幕後,類只是功能,應該有辦法做到這一點。 – pascalwhoop
我不知道這個答案。就個人而言,我集成了測試控制器而不是單元測試它們。 – mingos