2017-01-18 7 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

whats npm вы используете для тестирования? – IzumiSy

ответ

0

Функции, определенные с помощью async, возвращают Promise при вызове. Для Chai есть плагин под названием Chai as Promised, который вы можете использовать для проверки своей функции.

Установить Chai как было обещано от npm:

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

Подключите его к Chai:

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(), а не самой функции.