Я работаю с https://bootstrap -tagsinput.github.io / bootstrap-tagsinput / examples / для обработки выбора тегов. Эта библиотека использует бладхаунда в качестве механизма предложения, как показано в этих примерах.
В моих тестах компонентов angular2 + я звоню $el.focus()
. $ el - это поле ввода, в котором я использую bootstrap-tagsinput.
После события focus () я вызываю тайм-ауты в 1000 миллисекунд, а затем озвучиваю ответ ajax следующим образом ...
const request = jasmine.Ajax.requests.mostRecent();
request.respondWith(response);
Проблема в том, что тесты flaky
выполняются в CircleCI и проходят локально (только при использовании браузера). в CI они иногда работают, а иногда нет. Когда я удаляю тайм-ауты (которые я бы хотел отменить), тесты вообще не работают. Это потому, что вызов jasmine.Ajax.requests.mostRecent()
возвращает undefined
.
Когда я пытаюсь запустить весь угловой пакет в терминале локально, тесты все время терпят неудачу. Такое ощущение, что вызов ajax бладхаундом вообще не сработал, или он был поглощен чем-то другим. Вот мой тестовый костюм в полном объеме ...
describe('Component', () => {
let $el: JQuery;
beforeEach(() => {
jasmine.Ajax.install();
});
afterEach(() => {
jasmine.Ajax.uninstall();
});
describe('filters with different roles', () => {
it('should load and select project filter optionsr', () => {
setCurrentUser({ role: ['some role'] });
$el = instantiateComponent();
const response = {
responseText: '[{ "id":1, "name":"Nice name"}]',
status: 200,
};
$el.find('input[placeholder="Project(s)"]').focus();
runTimeouts(1000)
// the focus triggered an Ajax request to /projects.json
const request = jasmine.Ajax.requests.mostRecent();
request.respondWith(response); // this fails because request sometimes is undefined.
// I then test for UI changes here
});
});
});
Что я делаю не так? Есть ли способ сделать это без тайм-аутов, которые обеспечивают согласованность в тестах?