带有请求的单元测试NestJS控制器

时间:2018-07-19 12:03:25

标签: unit-testing express nestjs

我的Controller函数定义如下所示: function check($string){ $start = strpos($string, '<'); $end = strrpos($string, '>', $start); if ($end !== false) { $string = substr($string, $start); } else { $string = substr($string, $start, strlen($string) - $start); } // xml requires one root node $string = "<div>$string</div>"; libxml_use_internal_errors(true); libxml_clear_errors(); simplexml_load_string($string); return count(libxml_get_errors()) == 0; }

我如何准备/提供样板请求以提供Jest测试的功能的第一个参数? 在功能内部,我使用async login(@Req() request, @Body() loginDto: LoginDto): Promise<any> {设置标题。我应该以某种方式将实际的Request对象传递给函数,然后检查是否设置了标头,或者更确切地说是对整个Request对象进行模型化,然后检查是否调用了set函数?

2 个答案:

答案 0 :(得分:1)

我采用了不同的方法,并且没有使用node-mocks-http库,而是使用了@golevelup/ts-jest库,而不是测试函数是否返回某个值,例如res.json()res.status() ,我检查了是否使用所需的值调用了该函数。

我从古老的Kent C. Dodds's testing workshop借用了这种方法,看看是否有类似的想法。无论如何,这是我为了mockResponse的{​​{1}}依赖项所做的工作:

Controller's route

就是这样,我认为实现细节不是那么重要,但是无论如何,我将保留指向Github repo的链接,您可以在其中找到整个项目。

答案 1 :(得分:0)

我设法使用node-mocks-http库来模拟请求和响应。

const req = mocks.createRequest() req.res = mocks.createResponse()

然后将其作为参数传递。

const data = await authController.login(req, loginDto) expect(req.res.get('AccessToken')).toBe(token.accessToken)