Ho il seguente test:Come arrivare Mocha a fallire una prova
it.only('validation should fail', function(done) {
var body = {
title: "dffdasfsdfsdafddfsadsa",
description: "Postman Description",
beginDate: now.add(3, 'd').format(),
endDate: now.add(4, 'd').format()
}
var rules = eventsValidation.eventCreationRules();
var valMessages = eventsValidation.eventCreationMessages();
indicative
.validateAll(rules, body, valMessages)
.then(function(data) {
console.log("SHOULD NOT GET HERE");
should.fail("should not get here");
done();
})
.catch(function(error) {
console.log("SHOULD GET HERE");
console.log(error);
});
done();
});
Il test percorso di esecuzione è corretta. Quando ho dati di convalida, va a "NON DEVE ARRIVARE QUI". Il test è davvero per assicurarsi che non lo faccia. E quando inserisco dati non validanti, il codice va su "DOVRESTI RICEVI QUI". Quindi funzionano le regole di validazione.
Quello che sto cercando di fare è assicurarsi che il test fallisca quando ho dati di validazione errati e lo convalida. Tuttavia, quando lo eseguo come è con i dati validi, convalida, esegue il fail, ma la mocha lo segna ancora come il passaggio. Voglio che fallisca se l'esecuzione arriva a "NON DEVI ARRIVARE QUI".
Ho provato a lanciare un nuovo errore ("errore"); anche senza fortuna. In entrambi i casi sembra che il codice venga eseguito anche nel blocco .catch.
Qualche suggerimento? Ho trovato soluzioni per questo in un similar question. Questa domanda è scritta perché quelle soluzioni non sembrano funzionare per me.
possibile duplicato del [test di Forza Mocha fallire?] (http://stackoverflow.com/questions/14879181/force-mocha-test-to-fail) – aug
chiama il callback fatto solo nella funzione 'then' rimuovi la funzione outer done, perché quando arriverà alla funzione catch non ci sarà alcuna richiamata, quindi mostrerà automaticamente l'errore di timeout sin da ora dato che stai solo consolando l'esterno fatto sta passando tutto il test –