Javascript 摩卡咖啡的测试正在暂停
我正在运行Node.js4.0,因此它现在支持生成器 我尝试过gulp mocha co,最近也删除了它,并升级到Node 4.0,因为它现在支持生成器 不管怎样,当我开始尝试使我的摩卡测试生成器友好时,在添加*使我的摩卡单元测试生成器友好后,所有这些测试都会超时。我注意到它甚至没有运行我的测试实现代码。它进入了我的测试的*功能,这时它只是停留并超时 我现在正在使用 myTests.js 大口喝 carGet.js gatewayTestDouble.jsJavascript 摩卡咖啡的测试正在暂停,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我正在运行Node.js4.0,因此它现在支持生成器 我尝试过gulp mocha co,最近也删除了它,并升级到Node 4.0,因为它现在支持生成器 不管怎样,当我开始尝试使我的摩卡测试生成器友好时,在添加*使我的摩卡单元测试生成器友好后,所有这些测试都会超时。我注意到它甚至没有运行我的测试实现代码。它进入了我的测试的*功能,这时它只是停留并超时 我现在正在使用 myTests.js 大口喝 carGet.js gatewayTestDouble.js 这里发生了几件事 由于您已将done声
这里发生了几件事 由于您已将done声明为回调参数,Mocha将等待调用它,而这永远不会发生,因为。。。 Mocha不支持将生成器作为回调。它所看到的只是回调返回了一个迭代器。因为Mocha不会运行迭代器直到完成,所以永远不会到达done调用。 但是,Mocha确实支持返回承诺的函数,作为在参数列表中声明完成的函数的互斥替代 该实用工具可以包装迭代多个承诺的生成器,将它们转换为返回单个承诺的函数 为了工作,不要在arg列表中声明done,然后导入co并执行以下操作:
it('should foo', co.wrap(function*() {
var foo = yield somethingThatReturnsAPromise();
// do something with foo
}));
请注意,您也可以选择执行以下操作,而摩卡却无法分辨出其中的区别:
it('should foo', co.wrap(function*() {
return somethingThatReturnsAPromise().then(function(foo) {
// do something with foo
});
}));
希望有帮助 谢谢,我还在试着更多地关注发电机,还有co。比如co发电机函数到底是什么?不确定co发电机函数指的是什么,但传递给co的发电机应该只产生承诺,否则co会抛出错误。而通常情况下,您可以从生成器生成任何类型的值。
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;
}
};
'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.
it('should foo', co.wrap(function*() {
var foo = yield somethingThatReturnsAPromise();
// do something with foo
}));
it('should foo', co.wrap(function*() {
return somethingThatReturnsAPromise().then(function(foo) {
// do something with foo
});
}));