我正在使用Supertest和Jest测试Node.js API。
样本测试具有以下格式
it('Read a note for a user', (done) => {
request(graphqlURL)
.post('/graphql')
.set(baseHeaders())
.send({
query: graphQLQuery
})
.end((err, res) => {
expect(res.status).toBe(200);
done();
})
});
当前,当期望失败时,将记录以下内容
expect(received).toBe(expected) // Object.is equality
Expected: 200
Received: 404
我还想在失败的测试中记录请求和响应,以在调试时获得更多的上下文。
是否还有一种方法可以打印那些仅适用于失败的测试?
答案 0 :(得分:1)
expect
通过在期望失败时抛出Error
来工作。
message
的{{1}}属性是打印在测试报告中的内容。
我想如果您想使用现有的 期望,并且只想使用其他数据来扩充失败消息,则可以捕获Error
,将您的其他数据附加到{{1 }}属性,然后再次像这样抛出Error
:
message
答案 1 :(得分:0)
您可以这样打印响应:
it('Read a note for a user', (done) => {
request(graphqlURL)
.post('/graphql')
.set(baseHeaders())
.send({
query: graphQLQuery
})
.end((err, res) => {
if(!expect(res.status).toBe(200)) console.log('res',res) // print response
expect(res.status).toBe(200);
done();
})
});
答案 2 :(得分:0)
您可以创建一个custom matcher,以在期望失败时记录响应:
expect.extend({
statusCode(expected, response) {
const { status } = response
const pass = expected === status
if (pass) {
return {
message: () =>
`expected ${status} to be ${expected}`,
pass: true
}
} else {
return {
message: () =>
`expected ${status} to be ${expected}. Response: ${response}`,
pass: false
}
}
}
})
然后在您的测试中,使用自定义匹配器而不是典型的expect
:
it('Read a note for a user', (done) => {
request(graphqlURL)
.post('/graphql')
.set(baseHeaders())
.send({
query: graphQLQuery
})
.end((err, res) => {
expect.statusCode(200, res)
done()
})
})
很遗憾,there isn't really a way to access the HTTP request using supertest。但是,您可以将有关请求的任意信息添加到自定义匹配器的签名中。
答案 3 :(得分:0)
如果为正文添加其他期望,则与期望的期望值不匹配的情况将被记录。在状态码期望值之前具有此期望值将导致您所期望的效果。