/ / Виклик стажера до асинхронного зворотного виклику більше одного разу - javascript, модульне тестування, асинхронне, строфа, стажування

Виклик інтернесу asyn callback більше одного разу - javascript, unit-testing, asynchronous, strophe, intern

Чи можна вказати обставиниasyn зворотний дзвінок слід викликати в стажуванні? Скажімо, у нас є тестове тестування методу, який виконує кілька запитів XHR поспіль. Зокрема, я намагаюся перевірити свою реалізацію зворотного виклику, передбаченого для Strophe.connect. Це працює таким чином, що він надсилає кілька запитів XHR на сервер, який обробляє початкове рукостискання XMPP (BOSH).

Чи можна перевірити, що за 5 секунд файлзворотний дзвінок викликається із кодом стану 5 (підключено)? Проблема в тому, що зворотний виклик спрацьовує не раз, і мені потрібно почекати правильний код стану, а інші викинути.

var dfd = this.async(5000);

conn.connection.connect("jid", "pass", dfd.callback(function(status) {
if(status === 5) {
expect(status).to.have(something);
} else {
// here, I need to say intern to
// do nothing, just let the callback
// to be triggered once more
}
return true;
}));

Відповіді:

1 для відповіді № 1

Оскільки ваш зворотний дзвінок буде викликаний більше одного разу, я пропоную явно вирішити відкладене, а не обертати зворотний виклик dfd.callback. Спробуйте щось на зразок цього:

var dfd = this.async(5000);

conn.connection.connect("jid", "pass", dfd.rejectOnError(function (status) {
if (status !== 5) {
return;
}

// do any assertions here

// explicitly resolve the test since it was successful to this point
dfd.resolve();
}));

По-перше, ви помітите, що ми обертаємо зворотний дзвінок dfd.rejectOnError. Цей зручний метод відхилить відстрочку, якщо під час будь-якого виконання функції зворотного виклику виникає помилка. Далі ми позбулися dfd.callback, оскільки це спробує вирішити відстрочку, якщообернутий зворотний виклик виконується без помилки. Оскільки ваш зворотний виклик буде викликаний кілька разів, це не спрацює. Явно вирішивши відкладене лише тоді, коли ваші критерії дотримані (status !== 5 і будь-які твердження проходять) ваш зворотний дзвінок може виконуватися будь-яку кількість разів, доки відкладене вирішить протягом п’яти секунд.