Отклонение обещания не удалось с chai-as-promise

Я использую библиотеку chai-as-promised с обещанием, сгенерированным библиотекой q. Этот простой тестовый пример должен работать (обещание должно быть отклонено), или я неправильно понимаю функцию обещания?

bdd.it("Test rejection", function () {
    var promise = q.promise(function (resolve, reject, notify) {
        reject(new Error("test"));
    }).then(function () {
        // Nothing to do
    });
    promise.should.be.rejectedWith(Error);
    return promise;
});

Этот тест завершается с ошибкой: test (я использую Intern в качестве библиотеки модульных тестов), хотя следующий тест проходит:

bdd.it("Test rejection", function () {
    var promise = q.promise(function (resolve, reject, notify) {
        reject(new Error("test"));
    }).should.be.rejectedWith(Error);
    return promise;
});

person Troopers    schedule 16.03.2017    source источник


Ответы (1)


Библиотеке нужно, чтобы вы вернули возвращаемое значение .rejectedWith(), чтобы проверить утверждение. Вы просто звоните .should.be.rejectedWith() посреди теста, и он ничего не может с этим поделать.

Если вы посмотрите на документацию для chai-as-promised, вы увидите, что именно это они и делают в своих примерах:

return promise.should.be.rejectedWith(Error); 

То же самое верно и для других утверждений на основе обещаний, таких как .should.become().

Ваш второй тест правильный. Вы также можете просто использовать return вместо того, чтобы сначала присваивать результат переменной:

bdd.it("Test rejection", function () {
    return q.promise(function (resolve, reject, notify) {
        reject(new Error("test"));
    }).should.be.rejectedWith(Error);
});
person JLRishe    schedule 16.03.2017
comment
Хорошо, но как проверить несколько условий, таких как отклонение и ошибка с кодом, равным 31 для образца? - person Troopers; 16.03.2017
comment
@ Солдаты, я не уверен, но думаю, вы могли бы сделать return q.promise(.....).catch(function (error) { /* perform ordinary assertions on error */ }); - person JLRishe; 16.03.2017