gpt4 book ai didi

node.js - Supertest Expect 未正确断言状态代码

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:41 26 4
gpt4 key购买 nike

我有一个看起来像这样的测试:

  it('should fail to get deleted customer', function(done) {
request(app)
.get('/customers/'+newCustomerId)
.set('Authorization', 'Bearer ' + token)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(404, done)
});

我已阅读此处的文档:

https://github.com/visionmedia/supertest

它是这样说的:

note how you can pass done straight to any of the .expect() calls

不起作用的代码行是 .expect(404, done) 如果我将其更改为 .expect(200, done) 那么测试不会失败。

但是,如果我添加这样的结尾:

  it('should fail to get deleted customer', function(done) {
request(app)
.get('/customers/'+newCustomerId)
.set('Authorization', 'Bearer ' + token)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if (err) console.log(err);
done();
});
});

然后测试失败。为什么 .expect(200, done) 也没有失败?

最佳答案

根据文档,这符合预期。 ( https://github.com/visionmedia/supertest )

If you are using the .end() method .expect() assertions that fail will not throw - they will return the assertion as an error to the .end() callback. In order to fail the test case, you will need to rethrow or pass err to done()

当您同步进行断言时,您有义务手动处理错误。在您的第一个代码片段中,.expect(404, done) 永远不会被执行,因为在它到达那里之前抛出了一个异常。

您的第二个代码段按预期失败,因为它能够处理错误。由于错误已传递给 function(err, res) {} 处理程序。

我发现必须以这种方式处理错误很麻烦,而且几乎弄巧成拙。所以更好的方法是使用promises,这样就可以自动处理错误,如下所示:

it('should fail to get deleted customer', function() {
return request(app)
.get('/customers/'+newCustomerId)
.set('Authorization', 'Bearer ' + token)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200);
});

关于node.js - Supertest Expect 未正确断言状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com