我在摩卡中进行了一些单元测试,当我运行时,只有2/3的测试显示出来。
我正在使用斑点记者,并通过make运行我的测试。
这是我的makefile:
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 $ make test Express应用程序从端口9273开始
功能 GET / functions / get ✓应该是text / kinoki-function(67ms) ✓应该有10个功能(76ms) POST / functions / submit ✓不应该是404 ✓应该是没有查询字符串的400(错误请求)
4次传递(224 ms)
03:52 PM Kinoki-Server Ari $
它说4次传球,但我有6次测试!为什么摩卡会隐藏其他测试?
答案 0 :(得分:3)
我的猜测是当你直接在it
内嵌入调用时,mocha不能正确地注册它们。坚持每次拨打it
的模式必须直接在describe
回调中,看看是否能解决问题。