Mocha 测试通过但数据不正确
Mocha test passes with incorrect data
我使用 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,但不幸的是情况并非如此。
有没有人有什么想法?
一旦你有异步操作,你需要告诉测试运行器等待异步操作完成。使用 mocha
您可以 return 来自测试的承诺,或者您可以使用 done
回调或任意调用它。
在你调用 done
回调的情况下,你没有将它传递给测试回调,它应该是:
it('should bla bla', function (done) {
...
// call done()
})
我使用 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,但不幸的是情况并非如此。
有没有人有什么想法?
一旦你有异步操作,你需要告诉测试运行器等待异步操作完成。使用 mocha
您可以 return 来自测试的承诺,或者您可以使用 done
回调或任意调用它。
在你调用 done
回调的情况下,你没有将它传递给测试回调,它应该是:
it('should bla bla', function (done) {
...
// call done()
})