Я использую Jasmine в своих тестах конца-2-конца, написанных с помощью транспортира. Я пытаюсь создать абстракцию объекта страницы, которая будет использоваться в качестве базового класса для других объектов страницы, определенных в моем решении.Jasmine async test issue
Как мое приложение представляет собой классическое решение на основе формы, поэтому я могу собрать общее поведение для редактирования страниц в базовый класс. Чтобы быть ближе к шаблону M **, я хочу связать свой абстрактный вид с конкретной моделью.
Так моя базовая страница вид объекта выглядит следующим образом:
export class EditPageBase<T> {
constructor(T model) {
this.model = model;
}
fillForm() {
...
}
checkForm() {
...
}
}
где Т - класс модели, связанные с этой точки зрения.
Этот подход позволяет мне использовать структуру модели и отображать непосредственно на мой взгляд. Поэтому любое свойство, определенное в модели, имеет соответствующее представление на мой взгляд.
Так что я могу использовать следующий синтаксис для отображения моей модели для просмотра:
for(let prop in this.model) {
let ctrl = this.getControl(prop);
ctrl.sendKeys(this.model[prop]);
}
Так не важно, насколько сложна моя форма - мне нужно только определить моя модель правильно.
Проблемы у меня возник с проверкой данных формы, как транспортир возвращает обещания при запросе данных страницы:
for(let prop in this.model) {
let ctrl = this.getControl(prop);
expect(ctrl.getAttribute('value')).toEqual(this.model[prop] || '');
}
На этот раз кода времени бросает:
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Я должен понять, почему это происходит - потому что мой цикл может закончиться раньше, что обещание решит. Я не знаю, как справиться с этой ситуацией. Я не хочу создавать цепочку обещаний или другие обертки Promise.all
, так как Жасмин отлично работает с обещаниями, поэтому хочу оставить здесь код чистым.
Возможно, у кого-то были эти проблемы раньше, и вы можете поделиться некоторыми идеями о том, как использовать силу Жасмина здесь, не переключаясь на обещание ада.
Спасибо за ответ. Да, я знаю о 'done', но это не то, что мне нужно. Проблема в том, что мне нужно ждать всех обещаний внутри цикла, а не заканчивать выполнение функции до этого. Жасмин отлично справляется с обещаниями даже без «сделанного» обратного вызова. – VadimB