簡體   English   中英

使用Jest測試Typescript,如何測試內部函數? 我的導入/導出使我失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM