我正在运行Node.js 4.0,因此它现在支持生成器。
我已尝试过gulp-mocha-co,最近也将其删除,并升级到Node 4.0,因为它现在支持生成器。
无论哪种方式,只要我开始尝试使我的mocha测试生成器友好,我在添加*以使我的mocha单元测试生成器之后获得所有这些测试的超时。我注意到它甚至没有运行我的测试实现代码。它到达我的测试的* function(),当它只是坐着并超时时它。
我现在正在使用gulp-mocha。
myTests.js
"use strict";
var chai = require('chai'),
should = chai.should(),
testUtil = require('../../../test/testUtilities'),
carUseCase = require('../../../src/usecases/carGet'),
gateway= require('../../../test/gateway'),
carRequestModel = require('../../../src/models/http/request/carRequest');
describe('Get Car by Id', function() {
it('should return no car when no cars exist', function*(done){
var cars = [];
inMemoryGateway.data(cars);
carUseCase.gateway(gateway);
var request = testUtil.createCarRequest();
var responseModel = yield carUseCase.find(request);
should.not.exist(responseModel.cars);
var request = testUtil.createCarRequest(0, "", "", "");
var responseModel = yield carUseCase.find(request);
should.not.exist(responseModel.cars);
done();
});
gulp.js
var gulp = require('gulp'),
mocha = require('gulp-mocha');
...
gulp.task('mocha-unit', function() {
process.env.PORT = 5001;
return gulp.src([config.test.src.unit], { read: false })
.pipe(mocha({
reporter: config.test.mocha.reporter,
ui: 'bdd'
}))
});
carGet.js
var car = require('../entities/car'),
realGateway = require('../../src/gateways/carGateway'),
carResponse = require('../../src/models/http/response/carResponse'),
_gateway;
module.exports = {
find: function *(carRequest){
carResponse.http.statusCode = 200;
var entity = yield _gateway.find(carRequest.id);
if(!entity.cars || entity.cars.length == 0){
entity.cars = null;
carResponse.http.statusCode = 204;
}
carResponse.cars = entity.cars;
return carResponse;
}
};
gatewayTestDouble.js
'use strict';
var _data;
module.exports = {
data: function(data){
_data = data
},
find: function *(id) {
var found = [];
if(id == null && hasData(_data)){
yield _data;
return;
}
if(!id && !isPositiveNumber(id)){
yield found;
return;
}
if(isPositiveNumber(id) && hasData(_data)) {
for (var i = 0; i < _data.length; i++) {
if (_data[i].id === id)
found.push(_data[i]);
}
}
yield found;
}
};
错误
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
答案 0 :(得分:0)
这里发生了一些事情。
done
声明为回调参数,因此Mocha会等待它被调用,因为... ... done()
调用。 Mocha 确实支持返回promises的函数,作为在其arg列表中声明done
的函数的互斥替代。
co实用程序可以包装迭代多个promise的生成器,将它们转换为返回单个promise的函数。
为了工作,请不要在arg列表中声明done
,然后导入co
并执行以下操作:
it('should foo', co.wrap(function*() {
var foo = yield somethingThatReturnsAPromise();
// do something with foo
}));
请注意,您可以选择执行以下操作,而Mocha无法区分:
it('should foo', co.wrap(function*() {
return somethingThatReturnsAPromise().then(function(foo) {
// do something with foo
});
}));
希望有所帮助!