我有以下功能(使用Node.JS下的蓝鸟承诺):
module.exports = {
somefunc: Promise.method(function somefunc(v) {
if (v.data === undefined)
throw new Error("Expecting data");
v.process_data = "xxx";
return module.exports.someother1(v)
.then(module.exports.someother2)
.then(module.exports.someother3)
.then(module.exports.someother4)
.then(module.exports.someother5)
.then(module.exports.someother6);
}),
});
我试图测试(使用mocha,sinon,断言):
// our test subject
something = require('../lib/something');
describe('lib: something', function() {
describe('somefunc', function() {
it("should return a Error when called without data", function(done) {
goterror = false;
otherexception = false;
something.somefunc({})
.catch(function(expectedexception) {
try {
assert.equal(expectedexception.message, 'Expecting data');
} catch (unexpectedexception) {
otherexception = unexpectedexception;
}
goterror = true;
})
.finally(function(){
if (otherexception)
throw otherexception;
assert(goterror);
done();
});
});
});
所有这些都是如此,但对于一个人来说却感到错综复杂。
我的主要问题是测试函数中的Promises-chain(和order)。我已经尝试过几件事(用一种方法伪造一个物体,这种方法没有用;嘲笑它就像疯了一样);但似乎有一些我没有看到的东西,而且我似乎没有在这方面获得摩卡或者抄本文件。
有人有任何指示吗?
由于
计数
答案 0 :(得分:7)
Mocha支持承诺,所以你可以这样做
describe('lib: something', function() {
describe('somefunc', function() {
it("should return a Error when called without data", function() {
return something.somefunc({})
.then(assert.fail)
.catch(function(e) {
assert.equal(e.message, "Expecting data");
});
});
});
});
这大致相当于同步代码:
try {
something.somefunc({});
assert.fail();
} catch (e) {
assert.equal(e.message, "Expecting data");
}