J'essaie de mettre en place des tests in-browser en utilisant Mocha 2.4.5 et .Comment corriger le formatage d'erreur mocha en assertion asynchrone
Échec Les assertions doivent-elles indiquer une raison d'échec de test utile.
Toutefois, lorsque cette même assertion est effectuée dans le contexte d'un rappel jQuery Ajax, j'obtiens une erreur d'assertion non asservie à la place.
Prenons l'exemple suivant:
mocha.setup('bdd');
var url = 'http://localhost/api/v2/People';
describe('ajax',() => {
var that1 = this;
it('Passing async assertion', (done) => {
$.ajax({ url: url }).done(data => {
should(1).be.eql(1);
done();
});
});
it('Failing async assertion', (done) => {
var that2 = this;
$.ajax({ url: url }).done(data => {
should(0).be.eql(1);
done();
});
});
it('Failing sync assertion', (done) => {
should(0).be.eql(1);
done();
});
});
mocha.run();
Passing affirmation async 'passe et semble assez dans la sortie du lanceur de test.
'affirmation défaut de synchronisation' échoue et je reçois un stacktrace utile
Fail sync assertion ‣
AssertionError: expected 0 to equal 1
at Assertion.fail (http://path/to/should.js:220:17)
at Assertion.Object.defineProperty.value (http://path/to/should.js:292:19)
at Context. (tests.js:337:26)
Cependant, 'A défaut affirmation async' échoue (ce qui est bien), mais le stacktrace est usless.
Fail async assertion ‣
Error: Uncaught AssertionError (http://path/to/should.js:200)
J'ai joué avec la définition du contexte ajax à que1 ou que2, mais il ne fait aucune différence. Y a-t-il un autre moyen de formater les cas de test afin que les assertions asynchrones fonctionnent?
EDIT
Je reçois la même chose en utilisant un délai d'attente simple pour simuler l'asynchronisme
mocha.setup('bdd');
describe('ajax',() => {
var that1 = this;
it('Failing async assertion', (done) => {
setTimeout(() => {
should(0).be.eql(1);
done();
}, 100);
}).async = true;
it('Failing sync assertion', (done) => {
should(0).be.eql(1);
done();
});
});
mocha.run();