我在 mocha 中有一些单元测试,当我运行这些时,只有 2/3 的测试出现。我正在使用斑点报告器,并通过 make 运行我的测试。
这是我的生成文件:
REPORTER = list
TESTS = test/*.js test/**/*.js test/**/**/*.js
REQUIRE = should
test:
@NODE_ENV=test NODE_PATH=./app/controllers ./node_modules/.bin/mocha \
--reporter $(REPORTER) \
--ui tdd \
--require $(REQUIRE) \
-G \
$(TESTS)
test-ci:
@NODE_ENV=ci NODE_PATH=./app/controllers ./node_modules/.bin/mocha \
--reporter $(REPORTER) \
--ui tdd \
--require $(REQUIRE) \
$(TESTS)
start:
NODE_PATH=./app/controllers NODE_ENV=development nodemon server.js
.PHONY: test
并且test/test.js
:
/*!
* Module dependencies.
*/
var request = require('supertest')
var app = require('../server')
var mongoose = require('mongoose')
var config = require('../config/config')[process.env.NODE_ENV];
// other stuff you want to include for tests
function clearDB(done) {
(function(done) {
var index = 0;
var models = mongoose.modelNames();
function deleteModel(err) {
if (err) {
return done(err)
};
if (index == models.length) {
return done()
};
mongoose.model(models[index]).remove({}, deleteModel);
index++;
}
deleteModel();
})(done)
}
before(function(done) {
this.timeout(0)
clearDB(done);
})
function populateDatabase(Functions, done) {
Func = mongoose.model("KIFunction");
var functions = 0;
if (typeof Functions == 'function') {
done = Functions
Functions = 20
}
function addFunction(err) {
if (err) {
done(err);
}
if (functions < Functions) {
functions++;
var func = new Func({
string: ("n*" + functions),
approved1: true,
approved2: true,
approved: true,
}).save(addFunction);
} else {
done();
}
}
addFunction();
}
describe('Functions', function() {
describe('GET /functions/get', function() {
it('Should be text/kinoki-function', function(done) {
this.timeout(0)
populateDatabase(11, function(err) {
if (err) done(err)
request(app)
.get("/functions/get")
.query('n=[]')
.expect('Content-Type', new RegExp("kinoki-function"))
.expect(200)
.end(function(err, res) {
if (err) return done(err)
else done()
})
})
})
it('Should have 10 functions', function(done) {
this.timeout(0)
populateDatabase(25, function(err) {
if (err) return done(err)
request(app)
.get("/functions/get")
.query('n=[]')
.expect(200)
.end(function(err, res) {
var body = res.text
body.split("|").length.should.equal(10)
if (err) return done(err)
done()
})
})
it('Each Of Them Should Match The Function Pattern', function(done) {
this.timeout(0)
populateDatabase(11, function(err) {
if (err) return done(err)
request(app)
.get("/functions/get")
.query('n=[]')
.expect(200)
.end(function(err, res) {
var body = res.text
body.split("|").forEach(function(func) {
func.should.match(/[0-9]#n([+\-*\/][0-9]+)+#(Easy|Medium|Hard|Deadly)+#[0-9a-fA-F]{24}/)
})
if (err) return done(err)
done()
})
})
})
it('Should return \'false\' when there are no functions', function(done) {
this.timeout(0)
clearDB(function(err) {
if (err) done(err)
request(app)
.get("/functions/get")
.query('n=[]')
.expect(200)
.end(function(err, res) {
if (err) return done(err)
res.text.should.equal("false")
done()
})
})
})
it('Should NOT throw an error when no array of functions to exclude is in the querystring', function(done) {
this.timeout(0)
clearDB(function(err) {
if (err) done(err)
request(app)
.get("/functions/get")
.end(function(err, res) {
if (err) return done(err)
res.status.should.not.equal(500)
res.status.should.equal(200)
done()
})
})
})
})
describe("POST /functions/submit", function() {
this.timeout(0)
it("Should NOT be a 404", function(done) {
request(app)
.post("/functions/submit")
.end(function(err, res) {
if (err) return done(err)
res.status.should.not.equal(404)
done()
})
})
it("Should be a 400 (Bad Request) without querystring", function(done) {
request(app)
.post("/functions/submit")
.end(function(err, res) {
if (err) return done(err)
res.status.should.equal(400)
done()
})
})
})
})
})
after(function(done) {
// do some stuff
done()
})
这是 mocha 的输出:
03:48 PM Kinoki-Server Ari$ 在端口 9273 上启动测试 Express 应用程序
函数 GET /functions/get ✓ 应该是 text/kinoki-function (67ms) ✓ 应该有 10 个函数 (76ms) POST /functions/submit ✓ 不应该是 404 ✓ 应该是没有查询字符串的 400(错误请求)
4 次通过(224 毫秒)
03:52 PM Kinoki-Server Ari$
它说 4 次通过,但我有 6 次测试!为什么 mocha 隐藏其他测试?