2015-05-22 3 views
9

Я пишу Javascript Mocha модульные тесты по коду, который возвращает обещания. Я использую библиотеку Chai as Promised. Я ожидаю, что следующий минимальный модульный тест потерпит неудачу.Как зарегистрировать неудавшийся тест Mocha на Promise

var chai = require("chai"); 
var chaiAsPromised = require("chai-as-promised"); 
chai.use(chaiAsPromised); 
chai.should(); 

var Promise = require("bluebird"); 

describe('2+2', function() { 
    var four = Promise.resolve(2 + 2); 
    it('should equal 5', function() { 
     four.should.eventually.equal(5); 
    }) 
}); 

Когда я запускаю этот тест, я вижу ошибку утверждения, выводимую на консоль, но тест по-прежнему считается мимоходом.

> mocha test/spec.js 


    2+2 
    ✓ should equal 5 
Unhandled rejection AssertionError: expected 4 to equal 5 


    1 passing (10ms) 

Как написать этот тест, чтобы сбойное утверждение заставляло тест считаться сбоем?

ответ

10

Мне нужно было вернуть результат утверждения. Этот тест терпит неудачу, как ожидалось.

it('should equal 5', function() { 
     return four.should.eventually.equal(5); 
    }) 
+1

Что делать, если вам нужно сделать несколько утверждений ... – Jeremy

+2

Используйте 'Promise.all' для объединения нескольких утверждений. –

18

Ни для кого-то возникли проблемы с неудавшимися утверждениями не подведет модульные тесты с обещаниями, я узнал, что вы не должны проходить done функции. Вместо этого, просто вернуть обещание:

it('should handle promises', function(/*no done here*/) { 

    return promiseFunction().then(function(data) { 
     // Add your assertions here 
    }); 

    // No need to catch anything in the latest version of Mocha; 
    // Mocha knows how to handle promises and will see it rejected on failure 

}); 

This article указал мне в правильном направлении. Удачи!

+1

Лучший ответ во вселенной когда-либо. Хорошо, хорошо, вы можете видеть, что в последнее время я борюсь с моим невежеством JavaScript, но с положительной стороны это заставляет меня признаться за небольшие преимущества. :) –

Смежные вопросы