【发布时间】:2021-08-24 06:21:43
【问题描述】:
我正在尝试为以IncomingMessage 作为参数的函数编写单元测试。我知道它是一个流,但我不确定如何创建一个基本的测试假人,因为流会导致我的测试超时
:超时 - 在 jest.setTimeout.Timeout 指定的 5000 毫秒超时内未调用异步回调。在 jest.setTimeout.Error 指定的 5000 毫秒超时内未调用异步回调:
我的班级
import { IncomingMessage } from 'http';
export class MyClass
example(request: IncomingMessage): void {
console.log(request.get('hello?'))
}
}
我的测试
it('test', () => {
const myclass = new MyClass();
const request = {
get: () => 'hello!'
} as unknown as IncomingMessage
const response = myclass.example(request);
expect(response).toEqual('hello!');
});
我假设我需要关闭流,那么在将“虚拟”对象转换为类型 IncomingMessage 时我该怎么做?
我尝试过使用
const request = {
get: () => 'hello'
} as unknown as IncomingMessage
request.setTimeout(1)
然后我收到一个错误,提示找不到函数,这是有道理的,因为虚拟对象基本上是一个空对象,只有一个模拟函数
TypeError: request.setTimeout 不是函数
在这种情况下,我假设我需要实际创建一个真实的IncomingMessage?但我找不到太多关于如何做到这一点的文档或示例
创建真正的IncomingMessage 流、快速关闭它并使用模拟的get 方法的最佳方法是什么?我想我需要模拟一个套接字?
或者在这种情况下测试我的类和函数的正确方法是什么?
【问题讨论】:
-
echo 'example'是做什么的?它甚至是有效的 TypeScript 吗? -
糟糕,一些 bash 爬进来了。我修复了这个例子以使其更有意义
标签: node.js typescript unit-testing jestjs stream