用 Jest 模拟express.Router()

lon*_*nix 5 node.js express typescript jestjs

在我的测试代码中,我想模拟router

import * as express from "express";

const router = express.Router();    // I want to mock this
router.route(...).post(...);
router.route(...).get(...);
Run Code Online (Sandbox Code Playgroud)

在我的测试中:

import * as express from "express";

test("foo", () => {
  jest.mock("express", () => {
    Router: () => jest.fn()
  });
  // ...test stuff
});
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我究竟做错了什么?

Est*_*ask 2

模块模拟应该在导入之前。如果这种情况发生在顶层,babel-jest转换会自动放置jest.mockimport. 如果是嵌套的,则不会发生这种情况jest.mock

它应该是:

import * as express from "express";

jest.mock("express", () => {
  Router: () => jest.fn()
});

...
Run Code Online (Sandbox Code Playgroud)

或者:

test("foo", () => {
  jest.mock("express", () => {
    Router: () => jest.fn()
  });

  const express = require('express');
  // ...test stuff
});
Run Code Online (Sandbox Code Playgroud)