Supertest .expect(200)vs. res.status.should.equal(200);

时间:2016-07-26 02:06:05

标签: mocha supertest

这两者是否都有同样的目的?为什么它们都用于,例如,本教程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);

?有什么区别?

2 个答案:

答案 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