我的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函数?
答案 0 :(得分:1)
我采用了不同的方法,并且没有使用node-mocks-http
库,而是使用了@golevelup/ts-jest
库,而不是测试函数是否返回某个值,例如res.json()
或res.status()
,我检查了是否使用所需的值调用了该函数。
我从古老的Kent C. Dodds's testing workshop借用了这种方法,看看是否有类似的想法。无论如何,这是我为了mock
对Response
的{{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)