ReferenceError:expect is not defined(protractor)

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

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

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

Например:

npm install --save chai

Кроме того, поскольку в протракторе практически все возвращает промисы - вам нужно научится работать с этим в ваших assertions - Chai

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");
    });

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

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

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

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

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

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

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

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

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

Либо пользоваться тем вариантом, который писали выше:
Getting Started with Protractor and Cucumber - Semaphore
webdriver - Protractor, Cucumber and chai as promised: When chai assertion fails - Stack Overflow

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

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

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

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

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

Но лучшая штука как по мне для синхронизации именно в selenium тестах - fibers - Protractor - How do Fibers work in JavaScript? One of the... | Facebook

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

1 лайк