2016-07-21 2 views
2

Проблема:Выполнение обеих частей ожидать разрешения обещания

В транспортир, expect() пропатчена неявно понимать обещания, которые дает стиль сокращенная утверждение. Например .:

expect(elm.getText()).toEqual("expected text"); 

elm.getText() здесь не нужно быть в явном виде разрешено then() и будет неявно разрешен транспортир перед ожиданием проверяется.

Но, что, если «равная» часть также является обещанием. Например, текст из другого элемента. В этом случае мы должны решить вторую часть в явном виде:

elm2.getText().then(function (text2) { 
    expect(elm1.getText()).toEqual(text2); 
}); 

Вопрос:

Можно ли исправить Jasmine/транспортир, чтобы сделать это понять обещания с обеих сторон утверждения? Чтобы написать:

expect(elm1.getText()).toEqual(elm2.getText()); 
+1

Патч уже поддерживает обещания с обеих сторон. –

ответ

1

Только что испытано с обещаниями для обеих сторон - и оно разрешает их в порядке. Попробуйте ваш проект. Может быть, у вас нет ничего общего:

describe('ololo', function() { 

it('both sides are promises', function() { 
    browser.get('http://www.protractortest.org/testapp/ng1/#/form'); 

    let elementText1 = $('.ng-scope p').getText(); 

    let elementText2 = $('#transformedtext>h4').getText(); 

    //Will fail here, but you can see that it successfully resolved promises 
    expect(elementText1).toEqual(elementText2); 
}); 

}); 

Если это не работает для вас - я думаю, что вы можете использовать protractor.promise.all, только пример:

protractor.promise.all([elm2.getText(), elm1.getText()]) 
     .then(texts=> expect(texts[0]).toEqual(texts[1]), 'texts should be same') 

Или трудный путь - создавать собственную matchers , Посмотрите, как я работаю с обещаниями внутри matcher в моей библиотеке: https://github.com/Xotabu4/jasmine-protractor-matchers/blob/master/index.js#L39

0

Не красиво, но вы можете решить параметр. Это не-op для не обещаний ...

expect(elm1.getText()).toEqual(Promise.resolve(elm2.getText())); 
Смежные вопросы