如何将 Mocha 与 Promises/ES6 生成器一起使用?
How to use Mocha with Promises/ES6 generators?
我想将 Mocha
与 ES6 generators
一起使用,并可选择与 expect
一起使用。经过一些研究,我构建了以下代码片段:
describe('test', function() {
it('should not work', function() {
expect(function() {
return co(function*() {
yield Service.validate();
});
}).to.throw(new Error('error'));
});
});
Service.validate 抛出 new Error('error')
,这就是我 expect
。
module.exports = {
validate: function() {
return co(function*() {
// use yield to access db and so on
throw new Error('error');
});
}
};
但是,下面的代码会抛出 AssertionError: expected [Function] to throw 'Error: error'
。有人可以帮忙吗?
co
returns 一个promise,里面抛出的错误会变成rejected Promise。因此,您必须测试被拒绝的 Promise 而不是异常。此代码有效:
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var co = require("co");
var expect = chai.expect;
chai.use(chaiAsPromised); // Register chai-as-promised with Chai.
describe('test', function() {
it('should not work', function() {
return expect(co(function*() {
throw new Error("testing failure!");
})).to.be.rejectedWith(Error, "testing failure!");
});
});
请注意这是如何做到的 return expect(...)
。当您使用 expect
测试 promise 时,它 returns 一个 promise,它可以返回给 Mocha,这样它就可以知道测试何时结束。
chai-as-promised可与co
结合使用。 co
returns 一个承诺,所以应该相应地处理:
expect(co(function*() { ... })).to.be.rejectedWith(Error, 'error');
如果代码不是基于 co
,并且生成器不产生承诺,则可以直接测试生成器 yield
:
expect(() => (function* () { ... })().next()).to.throw(Error, 'error');
或者,chai-generator 可用于 to.yield
断言。
我想将 Mocha
与 ES6 generators
一起使用,并可选择与 expect
一起使用。经过一些研究,我构建了以下代码片段:
describe('test', function() {
it('should not work', function() {
expect(function() {
return co(function*() {
yield Service.validate();
});
}).to.throw(new Error('error'));
});
});
Service.validate 抛出 new Error('error')
,这就是我 expect
。
module.exports = {
validate: function() {
return co(function*() {
// use yield to access db and so on
throw new Error('error');
});
}
};
但是,下面的代码会抛出 AssertionError: expected [Function] to throw 'Error: error'
。有人可以帮忙吗?
co
returns 一个promise,里面抛出的错误会变成rejected Promise。因此,您必须测试被拒绝的 Promise 而不是异常。此代码有效:
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var co = require("co");
var expect = chai.expect;
chai.use(chaiAsPromised); // Register chai-as-promised with Chai.
describe('test', function() {
it('should not work', function() {
return expect(co(function*() {
throw new Error("testing failure!");
})).to.be.rejectedWith(Error, "testing failure!");
});
});
请注意这是如何做到的 return expect(...)
。当您使用 expect
测试 promise 时,它 returns 一个 promise,它可以返回给 Mocha,这样它就可以知道测试何时结束。
chai-as-promised可与co
结合使用。 co
returns 一个承诺,所以应该相应地处理:
expect(co(function*() { ... })).to.be.rejectedWith(Error, 'error');
如果代码不是基于 co
,并且生成器不产生承诺,则可以直接测试生成器 yield
:
expect(() => (function* () { ... })().next()).to.throw(Error, 'error');
或者,chai-generator 可用于 to.yield
断言。