这两者是否都有同样的目的?为什么它们都用于,例如,本教程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);
?有什么区别?
答案 0 :(得分:1)
.expect(200)
部分正在使用超级工具来验证数据。 object.should.equal(value)
部分正在使用shouldJS进行验证。
我更喜欢在.end()中使用shouldJS,因为它允许我根据需要进行一些数据操作,测试,日志记录等。
请注意以下内容:https://www.npmjs.com/package/supertest
如果使用.end()方法.expect()失败的断言不会抛出 - 它们会将断言作为错误返回给.end()回调。
因此,在上面显示的示例代码中,如果.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)
之类的事情会发现错误吗?
答案:简短的回答是“是”。在我上面引用的同一页面上,它有以下内容:
这是mocha的一个例子,请注意如何直接完成 任何.expect()调用:
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);
});
});
答案 1 :(得分:0)
从技术上讲,没有什么区别,我认为你应该坚持.expect(200)
,就像最完整的例子一样:https://github.com/visionmedia/supertest