[英]Testing Typescript with Jest, how do I test an internal function? My import/export is failing me
我是Typescript的新手,想與Jest進行單元測試。 我安裝了Jest,並且在運行它時收到錯誤消息,我簡化了此示例的代碼,但它繼續失敗:
FAIL src\__tests__\validateSender.ts
https validation
ReferenceError: validateSender is not defined
at Object.<anonymous>.test (src/__tests__/validateSender.ts:10:10)
at process._tickCallback (internal/process/next_tick.js:109:7)
找不到功能的測試( ./src/__tests__/validateSender.js
):
import {} from "jest";
const connection = {
encrypted: "undefined",
};
const req = {
connection : ("{connection}"),
};
test("https validation", () => {
expect(validateSender(req)).toThrow();
});
函數( ./src/validateSender.js
):
function validateSender(req) {
if (typeof req.connection.encrypted === "undefined") {
throw new CustomException("validateSender", "connection must be secured.");
} else { return; }
}
我的Jest package.json部分( ./package.json
):
"jest": {
"transform": {
"^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json"
]
}
我嘗試直接為validateSender文件添加導入語句,但是以相同的方式失敗(在根目錄的npm test
,我import {} from "./src/validateSender";
添加了import {} from "./src/validateSender";
到文件中並收到上述錯誤。)
還建議我嘗試import validateSender from "./src/validateSender";
但我收到error TS2307: Cannot find module './src/validateSender'.
看來我缺少此過程的一些基礎知識,但未能在TS手冊中找到它。
為了測試模塊成員,必須將其導出。 否則,您的測試將看不到它。
這並不意味着您需要導出所有內容-在大多數情況下,您可以在公共API上進行測試並涵蓋內部成員。
模塊文件
export function validateSender(req) {
if (typeof req.connection.encrypted === "undefined") {
throw new Error("validateSender connection must be secured.");
} else { return; }
}
測試文件
import "jest";
import { validateSender } from './ext';
const connection = {
encrypted: "undefined",
};
const req = {
connection: ("{connection}"),
};
test("https validation", () => {
expect(validateSender(req)).toThrow();
});
這將使您走到這一步:
最后...要期望發生某些事情,您需要將代碼調整為:
test("https validation", () => {
expect(() => validateSender(req)).toThrow();
});
這將傳遞未執行的函數,該函數將在測試中執行,而不是執行該函數並傳遞結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.