gpt4 book ai didi

node.js - 如何用 Jest 模拟 express.Application?

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:09 27 4
gpt4 key购买 nike

一些将 express 作为参数的类(基本 DI):

class App {
constructor(express: express.Application) { /* ... */ }
}

我的测试:

// this doesn't work ("argument not assignable"):
//const expressMock = jest.mock("express");
//let app = new App(expressMock);

// so how do I mock it?
const expressMock = ???
let app = new App(expressMock);

如何用 Jest 模拟 express.Application?整个事情,而不仅仅是请求或路由等。

最佳答案

从技术上讲,express.Application 不能被模拟,它是一个接口(interface)。它是它所代表的应该被模拟的对象。

作为jest.mock documentation 声明,它

Returns the jest object for chaining.

所以这不是检索模拟对象的正确方法:

const expressMock = jest.mock("express");

正确的应该是

jest.mock("express");
...
const expressMock = require("express");

此外,App 接受的不是 express 工厂函数,而是应用程序对象,这是 express() 调用的结果。

jest.mock 没有工厂函数会导致自动模拟的 express 工厂无法生成正确的应用程序对象。

因为 expressMock 在测试中直接传递给 App ,所以没有必要模拟 Express 模块。可以传递包含最低限度实现的模拟:

const expressMock = {
use: jest.fn(),
...
} as any as express.Application;

let app = new App(expressMock);

关于node.js - 如何用 Jest 模拟 express.Application?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com