为什么我本应失败的超测却通过了?
Why my Supertest test that should be failing is passing?
我正在基于这个 repo 开始我的项目:
https://github.com/madhums/node-express-mongoose
我决定做的第一件事是编写测试,所以我去了测试文件,它看起来像这样:
var mongoose = require('mongoose');
var should = require('should');
var request = require('supertest');
var app = require('../server');
var context = describe;
// other stuff you want to include for tests
before(function (done) {
// clear db and other stuff
done();
});
describe('Users', function () {
describe('POST /users', function () {
it('should create a user', function (done) {
request(app)
.post('/users')
.field('name', 'foo')
.field('email', 'foo')
.field('password', 'foo')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res){
console.log(err);
if(err){
console.log("error");
}
// console.log(res);
});
done();
});
});
});
after(function (done) {
// do some stuff
done();
});
我实际上并没有创建路由,所以测试应该失败了,我什至在 .end 上遇到了错误,所以知道为什么测试没有失败吗?
当我 运行 npm test
时,我的控制台显示了这个
Express app started on port 3000
Users
POST /users
✓ should create a user
[Error: expected "Content-Type" matching /json/, got "text/html; charset=utf-8"]
error
1 passing (653ms)
问题是您的测试是异步的,但您的代码是同步的。具体来说,总是调用 done()
行。
您需要将 done()
行移动到 .end
块中,并为错误情况添加 done(err)
,如下所示:
.end(function(err, res){
if(err){
console.log("error");
done(err);
}
else {
console.log(res);
done();
}
});
我正在基于这个 repo 开始我的项目: https://github.com/madhums/node-express-mongoose
我决定做的第一件事是编写测试,所以我去了测试文件,它看起来像这样:
var mongoose = require('mongoose');
var should = require('should');
var request = require('supertest');
var app = require('../server');
var context = describe;
// other stuff you want to include for tests
before(function (done) {
// clear db and other stuff
done();
});
describe('Users', function () {
describe('POST /users', function () {
it('should create a user', function (done) {
request(app)
.post('/users')
.field('name', 'foo')
.field('email', 'foo')
.field('password', 'foo')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res){
console.log(err);
if(err){
console.log("error");
}
// console.log(res);
});
done();
});
});
});
after(function (done) {
// do some stuff
done();
});
我实际上并没有创建路由,所以测试应该失败了,我什至在 .end 上遇到了错误,所以知道为什么测试没有失败吗?
当我 运行 npm test
时,我的控制台显示了这个Express app started on port 3000
Users
POST /users
✓ should create a user
[Error: expected "Content-Type" matching /json/, got "text/html; charset=utf-8"]
error
1 passing (653ms)
问题是您的测试是异步的,但您的代码是同步的。具体来说,总是调用 done()
行。
您需要将 done()
行移动到 .end
块中,并为错误情况添加 done(err)
,如下所示:
.end(function(err, res){
if(err){
console.log("error");
done(err);
}
else {
console.log(res);
done();
}
});