Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

ReferenceError:expect is not defined(protractor)

protractor
cucumber
Теги: #<Tag:0x00007fedbbbafa80> #<Tag:0x00007fedbbbaf918>

#1

Использую версию 5.1.0
Хочу сделать проверку на получение текста
У меня (не) получается сделать expect
Подскажите как решить данную проблему

consumer.When(/^значение в текстовом поле "([^"]*)" равно "([^"]*)"$/, function (field, value: string) {
        let input = element(by.model(value)).getText();
        expect(input).toBe('Foo123');
    });

(Oleksandr Khotemskyi) #2

В комплекте с cucumberJS не идет никакой библиотеки для assertions. Вам нужно установить самостоятельно.

Например:
http://chaijs.com/

npm install --save chai

Кроме того, поскольку в протракторе практически все возвращает промисы - вам нужно научится работать с этим в ваших assertions - http://chaijs.com/plugins/chai-as-promised/

npm install --save chai-as-promised

Или используя async/await

Подключаем в код:

let chai = require("chai");
let chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
let expect = chai.expect;

consumer.When(/^значение в текстовом поле "([^"]*)" равно "([^"]*)"$/, function (field, value: string) {
        let input = element(by.model(value)).getText();
        expect(input).to.eventually.equal("Foo123");
    });

#3

Invalid Chai property: should - выдает вот такую ошибку


(Oleksandr Khotemskyi) #4

попробуйте так -

expect(input).to.eventually.equal("Foo123");

(Bolatbek) #5

Ставьте chai и юзайте обычный assert:

assert.equal(input, "Foo123")
or
assert.isTrue(input === "Foo123")

(Oleksandr Khotemskyi) #6

Покажите пример как ассертить значения промисов с обычным chai


(Bolatbek) #7

По-хорошему, выше указанный пример должен быть в Then(), вот вариант с обычным ассертом ):

consumer.Then(/^значение в текстовом поле "([^"]*)" равно "([^"]*)"$/, function (field, value: string) {
    return element(by.model(value)).getText().then((res) => {
        assert.equal(input, "Foo123");
    })
});

Это альтернативный вариант. Не самый лучший, но понятный.

Либо пользоваться тем вариантом, который писали выше:
https://semaphoreci.com/community/tutorials/getting-started-with-protractor-and-cucumber
https://stackoverflow.com/questions/27067673/protractor-cucumber-and-chai-as-promised-when-chai-assertion-fails

Просто я люблю обычные ассерты, безо всяких “should” or “toBe”.

Это же кошмар:

this.When(/^I assert async code$/, function(callback) {
    expect(asyncMethod()).to.eventually.equal(true).and.notify(callback);
});

(Oleksandr Khotemskyi) #8

Согласен. Вообще для себя я остановился в итоге на async/await:

consumer.Then(/^значение в текстовом поле "([^"]*)" равно "([^"]*)"$/, async function (field, value: string) {
    expect(await element(by.model(value)).getText()).to.equal("Foo123")
});

Но лучшая штука как по мне для синхронизации именно в selenium тестах - fibers - https://www.facebook.com/ProtractorAngularJS/posts/1950761568515087

Надо бы написать свой проект где перегнать протрактор на Fibers