2017-01-18 62 views
0

這工作:編寫一個測試爲異步函數拋出一個錯誤

const err = new exceptions.InvalidCredentialsError(''); 
const fn = function() { throw err; }; 
expect(fn).to.throw(err); 

一個怎樣寫一個異步函數測試,但?

const err = new exceptions.InvalidCredentialsError(''); 
const fn = async function() { throw err; }; 
expect(fn).to.throw(err); 

上述不起作用。

+0

你用什麼npm進行測試? – IzumiSy

回答

0

async定義的函數在調用時返回Promise。 Chai有一個名爲Chai as Promised的插件,您可以使用它來測試您的功能。

安裝柴從npm承諾:

$ npm install chai-as-promised --save-dev 

將其插入到柴:

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 

然後寫你的異步功能的測試。如果您的測試環境,允許你從測試(如摩卡)返回一個Promise,那麼這樣做:

const err = new exceptions.InvalidCredentialsError(''); 
const fn = async function() { throw err; }; 
return expect(fn()).to.be.rejectedWith(err); 

如果您的測試環境不會讓你返回一個Promise,而是執行此操作:

const err = new exceptions.InvalidCredentialsError(''); 
const fn = async function() { throw err; }; 
expect(fn()).to.be.rejectedWith(err).notify(done); // where `done` is the callback 

請注意函數的返回值(a Promise)傳遞給expect(),而不是函數本身。

相關問題