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

Проблема:

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

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

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

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

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

Вопрос:

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

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

person alecxe    schedule 21.07.2016    source источник
comment
Патч уже поддерживает обещания с обеих сторон.   -  person Florent B.    schedule 21.07.2016


Ответы (2)


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

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')

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

person Xotabu4    schedule 27.07.2016

Не очень красиво, но вы можете разрешить параметр. Это запрет на обещания ...

expect(elm1.getText()).toEqual(Promise.resolve(elm2.getText()));
person danh    schedule 21.07.2016