【问题标题】:Mocking Express Request with ts-mockito and Typescirpt使用 ts-mockito 和 Typescript 模拟 Express 请求
【发布时间】:2020-12-18 05:37:20
【问题描述】:

是否可以在打字稿中使用ts-mockito 模拟来自Express 的类请求?

我尝试了以下

import { Request, Response } from "express";  

const request = mock(Request);
const req: Request = instance(request);

但在req 上出现错误:Type 'Request' is missing the following properties from type 'Request<ParamsDictionary>': get, header, accepts, acceptsCharsets, and 73 more.

【问题讨论】:

  • 为什么要模拟一个请求?一般来说,单元测试控制器是个坏主意,请使用 Supertest 之类的东西。
  • @jonrsharpe 我想精确地模拟它以进行测试:以便在我的单元测试中我可以传递带有虚拟数据的自定义请求(和响应)对象。 (顺便说一句,我没有太多使用打字稿测试的经验????)
  • 再一次,单元测试控制器是个坏主意。嘲笑你不拥有的东西也是如此!
  • 我明白你的意思:模拟外部库是不好的做法,应该尽可能避免。由于我可能误解了自己,让我进一步说明我的情况:我正在测试一个由 http 请求触发的函数。为了做到这一点,我必须向它传递一些自定义参数。如果不通过模拟,您将如何将自定义参数传递给该函数?
  • 再一次,你可以使用 Supertest 之类的东西来发出请求。如果您想对控制器使用处理请求的某些业务逻辑进行单元测试,请测试提供它的服务而不是控制器。

标签: typescript unit-testing express mocking ts-mockito


【解决方案1】:

Request 是一个接口,所以你应该使用这个语法:

import { Request, Response } from "express";
import { mock, instance } from "ts-mockito";

const mockReq = mock<Request>();
const req = instance(mockReq);

请参阅ts-mockito documentation 了解更多信息。

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2012-11-01
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多