超测.expect(200) vs. res.status.should.equal(200);
Supertest .expect(200) vs. res.status.should.equal(200);
这两个目的是一样的吗?为什么它们都用于例如本教程 https://codeforgeek.com/2015/07/unit-testing-nodejs-application-using-mocha/ ?
编辑,看下面代码:
var supertest = require("supertest");
var should = require("should");
// This agent refers to PORT where program is runninng.
var server = supertest.agent("http://localhost:3000");
// UNIT test begin
describe("SAMPLE unit test",function(){
// #1 should return home page
it("should return home page",function(done){
// calling home page api
server
.get("/")
.expect("Content-type",/json/)
.expect(200) // THis is HTTP response
.end(function(err,res){
// HTTP status should be 200
res.status.should.equal(200);
// Error key should be false.
res.body.error.should.equal(false);
done();
});
});
});
是否有必要
.expect(200)
和
res.status.should.equal(200);
?有什么区别?
从技术上讲没有区别,我认为你应该坚持 .expect(200)
就像超级测试示例建议的那样:https://github.com/visionmedia/supertest
.expect(200)
部分使用超级测试工具来验证数据。 object.should.equal(value)
部分使用 shouldJS 进行验证。
我更喜欢在 .end() 中使用 shouldJS,因为它允许我根据需要进行一些数据操作、测试、日志记录等。
请注意以下内容:https://www.npmjs.com/package/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.
因此,在您上面显示的示例代码中,如果 .expect("Content-type",/json/)
或 .expect(200)
失败,则 .end() 中没有任何内容可以捕获它。一个更好的例子是:
var supertest = require("supertest");
var should = require("should");
// This agent refers to PORT where program is runninng.
var server = supertest.agent("http://localhost:3000");
// UNIT test begin
describe("SAMPLE unit test",function(){
// #1 should return home page
it("should return home page",function(done){
// calling home page api
server
.get("/")
.expect("Content-type",/json/)
.expect(200) // THis is HTTP response
.end(function(err,res){
// NOTE: The .expect() failures are handled by err and is
// properly passed to done. You may also add logging
// or other functionality here, as needed.
if (err) {
done(err);
}
// Error key should be false.
res.body.error.should.equal(false);
done();
});
});
});
更新以回答评论中的问题并在此处提供更漂亮的回复:
问题:像 .expect(200, done)
这样的操作会捕获错误吗?
答案:简短的回答是,"Yes"。在我上面引用的同一页上,它具有以下内容:
Here's an example with mocha, note how you can pass done straight to
any of the .expect() calls:
describe('GET /user', function() {
it('respond with json', function(done) {
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
});
});
这两个目的是一样的吗?为什么它们都用于例如本教程 https://codeforgeek.com/2015/07/unit-testing-nodejs-application-using-mocha/ ?
编辑,看下面代码:
var supertest = require("supertest");
var should = require("should");
// This agent refers to PORT where program is runninng.
var server = supertest.agent("http://localhost:3000");
// UNIT test begin
describe("SAMPLE unit test",function(){
// #1 should return home page
it("should return home page",function(done){
// calling home page api
server
.get("/")
.expect("Content-type",/json/)
.expect(200) // THis is HTTP response
.end(function(err,res){
// HTTP status should be 200
res.status.should.equal(200);
// Error key should be false.
res.body.error.should.equal(false);
done();
});
});
});
是否有必要
.expect(200)
和
res.status.should.equal(200);
?有什么区别?
从技术上讲没有区别,我认为你应该坚持 .expect(200)
就像超级测试示例建议的那样:https://github.com/visionmedia/supertest
.expect(200)
部分使用超级测试工具来验证数据。 object.should.equal(value)
部分使用 shouldJS 进行验证。
我更喜欢在 .end() 中使用 shouldJS,因为它允许我根据需要进行一些数据操作、测试、日志记录等。
请注意以下内容:https://www.npmjs.com/package/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.
因此,在您上面显示的示例代码中,如果 .expect("Content-type",/json/)
或 .expect(200)
失败,则 .end() 中没有任何内容可以捕获它。一个更好的例子是:
var supertest = require("supertest");
var should = require("should");
// This agent refers to PORT where program is runninng.
var server = supertest.agent("http://localhost:3000");
// UNIT test begin
describe("SAMPLE unit test",function(){
// #1 should return home page
it("should return home page",function(done){
// calling home page api
server
.get("/")
.expect("Content-type",/json/)
.expect(200) // THis is HTTP response
.end(function(err,res){
// NOTE: The .expect() failures are handled by err and is
// properly passed to done. You may also add logging
// or other functionality here, as needed.
if (err) {
done(err);
}
// Error key should be false.
res.body.error.should.equal(false);
done();
});
});
});
更新以回答评论中的问题并在此处提供更漂亮的回复:
问题:像 .expect(200, done)
这样的操作会捕获错误吗?
答案:简短的回答是,"Yes"。在我上面引用的同一页上,它具有以下内容:
Here's an example with mocha, note how you can pass done straight to any of the .expect() calls:
describe('GET /user', function() {
it('respond with json', function(done) {
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
});
});