Mocha测试通过了错误的数据

时间:2017-02-27 20:03:40

标签: node.js unit-testing mocha chai supertest

我使用Mocha,Supertest和Chai进行了以下测试:

const app = require('../server')
const expect = require('chai').should()
const request = require('supertest')

describe('GET /webhook', function () {
  context('a verify request from Facebook with a correct token', function() {
    it('responds with 200 and displays the challenge query in the response body', function() {
      request(app)
        .get('/webhook?hub.mode=subscribe&hub.challenge=123456789&hub.verify_token=' + process.env.FB_VERIFY_TOKEN)
        .expect(200)
        .end(function (err, res) {
          console.log(res.text)
          res.should.have.property("text", "abc")
          done()
        })
    })
  })
})

正如您所看到的,我们希望响应能够拥有属性' text'内容为' abc'。但是,当我运行测试时,它没有任何问题。

以下是回复的缩短版本:

ClientRequest{  
   res:IncomingMessage   {  
      headers:{  
         'x-powered-by':'Express',
         'content-type':'text/html; charset=utf-8',
         'content-length':'9',
         etag:'W/"9-JfnnlDI7RTiF9RgfG2JNCw"',
         date:'Mon, 27 Feb 2017 19:45:30 GMT',
         connection:'close'
      },
      rawHeaders:[  
         'X-Powered-By',
         'Express',
         'Content-Type',
         'text/html; charset=utf-8',
         'Content-Length',
         '9',
         'ETag',
         'W/"9-JfnnlDI7RTiF9RgfG2JNCw"',
         'Date',
         'Mon, 27 Feb 2017 19:45:30 GMT',
         'Connection',
         'close'
      ],
      upgrade:false,
      url:'',
      method:null,
      statusCode:200,
      statusMessage:'OK',
      req:[  
         Circular
      ],
      text:'123456789',
   }
}

我期待测试失败,如abc!= 123456789,但不幸的是,情况并非如此。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

一旦进行了异步操作,就需要告诉测试运行器等待异步操作完成。使用mocha,您可以从测试中返回承诺,也可以使用done回调或随意调用它。

在您调用done回调的情况下,您没有将其传递给测试回调,它应该是:

it('should bla bla', function (done) {
  ...
  // call done()
})