2016-01-19 2 views
1

Я бегу в этом вопросе:Jasmine Добавить в Обещай

Expected 2 to equal 'Promise::6492 {[[PromiseStatus]]: "pending"}1'. 

Мой код выглядит следующим образом:

Spec:

this.allRows = element.all(by.name('row')); 

Жасмин

var prevRowCount = this.allRows().count() 

this.addRow(); 

expect(this.allRows.count()).toEqual(prevRowCount+1); 

Как могу ли я добавить один к счету this.allRow s.count() возвращается?

ответ

1

Протекторы ElementFinder и ElementArrayFinder построены вокруг WebElement Selenium, таким образом они rely on promises heavily.

Протранслятор provides an adapter for Jasmine, поэтому последний может использовать свою концепцию обещания и развернуть обещания прозрачно в expect и соборах.

Таким образом, спецификация должна придерживаться обещаний вручную. Или обещания могут быть сопоставлены напрямую. Это становится тривиальной задачей с ES5:

expect(this.allRows.count()).toEqual(prevRowCount.then(function (count) { 
    return ++count; 
})); 

И это более удобно с ES6 синтаксический сахар:

expect(this.allRows.count()).toEqual(prevRowCount.then((count) => ++count)); 
2

Вы должны явно разрешить на prevRowCount обещание:

prevRowCount.then(function (prevRowCount) { 
    this.addRow(); 

    expect(this.allRows.count()).toEqual(prevRowCount+1); 
}); 

Обратите внимание, что вам не нужно делать то же самое для вновь полученного количества строк внутри this.allRows.count(), так как expect() бы разрешить его неявно перед проверкой ожидание.

Смежные вопросы