我尝试使用supertest来检查Jest的res.body,但是下面的代码片段总是失败
request(app)
.post('/auth/signup')
.send(validEmailSample)
.expect(200, {
success: true,
message: 'registration success',
token: expect.any(String),
user: expect.any(Object),
});
字符串
但是当我重写测试以检查回调中的主体时,如下所示:
test('valid userData + valid email will result in registration sucess(200) with message object.', (done) => {
request(app)
.post('/auth/signup')
.send(validEmailSample)
.expect(200)
.end((err, res) => {
if (err) done(err);
expect(res.body.success).toEqual(true);
expect(res.body.message).toEqual('registration successful');
expect(res.body.token).toEqual(expect.any(String));
expect(res.body.user).toEqual(expect.any(Object));
expect.assertions(4);
done();
});
});
型
测试会通过的。
我确信这与expect.any()
有关。正如Jest的文档所说,expect.any和expect.anything只能与expect().toEqual
和expect().toHaveBeenCalledWith()
一起使用,我想知道是否有更好的方法来做到这一点,在supertest的expect API中使用expect.any。
2条答案
按热度按时间fivyi3re1#
可以使用expect.objectContaining(object)。
匹配任何递归匹配预期属性的接收对象。即,预期对象是接收对象的子集。因此,它匹配包含预期对象中存在的属性的接收对象。
app.js
:字符串
app.test.js
:型
集成测试结果与覆盖率报告:
型
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/47865190
i34xakig2#
把它赋给一个变量然后做任何你想做的事。
字符串