2016-04-02 7 views
3

Я пишу тестовый пакет, который проверяет функции возврата обещаний. Одной из распространенных тем этих тестов является необходимость проверить, правильно ли функция возврата обещаний выдает ошибку при передаче недопустимых аргументов. Я пробовал использовать should.throws, но просматривая код, я вижу, что он не предназначен для работы с обещаниями.Существует ли функция tojs, которая имитирует should.throws для обещаний?

Я сделал следующую функцию полезности, чтобы получить необходимую мне функцию:

var TestUtil = module.exports; 
 
var should = require('should'); 
 

 
/** 
 
* Checks if a promise chain throws an error, and optionally that the error includes 
 
* the given errorMsg 
 
* @param promise {String} (optional) error message to check for 
 
* @param errorMsg 
 
*/ 
 
TestUtil.throws = function(promise, errorMsg) { 
 
    return promise 
 
    .then(function(res) { 
 
throw new Error(); // should never reach this point 
 
    }) 
 
    .catch(function(e) { 
 
if (errorMsg) { 
 
    e.message.should.include(errorMsg); 
 
} 
 
should.exist(e); 
 
    }); 
 
};

существует ли функция shouldjs, что делает это то же самое? Я хотел бы, чтобы мои тесты были согласованными, используя только ifjs api для проверки, а не используя эту одноразовую функцию.

+2

Не .rejectedWith является то, что вы смотрел? –

+0

Я думаю, вам нужно использовать ['.then (..., ...)' вместо '.then (...) .catch (...)'] (http://stackoverflow.com/q/24662289/1048572) Вот? – Bergi

ответ

1

Как сказал ден бардадим, то, что я ищу, является .rejectedWith, который является одной из функций утверждения обещаний от sujs. Вы можете использовать его как так (копируется непосредственно из документации API shouldjs'S):

function failedPromise() { 
 
    return new Promise(function(resolve, reject) { 
 
    reject(new Error('boom')) 
 
    }) 
 
} 
 
failedPromise().should.be.rejectedWith(Error); 
 
failedPromise().should.be.rejectedWith('boom'); 
 
failedPromise().should.be.rejectedWith(/boom/); 
 
failedPromise().should.be.rejectedWith(Error, { message: 'boom' }); 
 
failedPromise().should.be.rejectedWith({ message: 'boom' }); 
 

 
// test example with mocha it is possible to return promise 
 
it('is async',() => { 
 
    return failedPromise().should.be.rejectedWith({ message: 'boom' }); 
 
});