Сравнивать 2 одинаковые строки не удается с помощью Chai to - PullRequest
0 голосов
/ 16 февраля 2019

Я сравниваю текст элемента со строкой.Оба идентичны и имеют апостроф.Я использую Protractor в машинописи с Chai to.equal, ожидаемый сбой.

option1=element(by.xpath()); // I'll do it

async getOption1() {
        return await this.Option1.getText();
    }

expect(getOption1()).to.equal("I'll do it");  //fails

AssertionError + ожидаемый - фактический

 -I'll do it
 +I'll do it

Это как-то связано с апострофом, я думаю, нонижеприведенное утверждение проходит.

expect("I'll do it").to.equal("I'll do it")

Может кто-нибудь, пожалуйста, дайте мне знать, как это исправить?

Спасибо

Ответы [ 4 ]

0 голосов
/ 18 февраля 2019

getText() - это Async API, который возвращает обещание.chai не может обработать обещание напрямую, вы можете использовать другой пакет chai-as-обещано вместе для обработки обещания.

const chai = require('chai'),
chai.use(require('chai-as-promised'))

global.expect = chai.expect

// if the actual value is a promise, you muse use 'eventually'
// in pattern: expect().to.eventually.xxxx() as following
// otherwise, don't use eventually
expect(getOption1()).to.eventually.equal('I'll do it')

let name = 'tom'
expect(name).to.equal('tom') // don't use eventually at here, 
                             // due to variable: name is not a promise.
0 голосов
/ 16 февраля 2019

У меня есть предположение, что на самом деле не может быть равным, например, из-за., \n или любой другой символ.Самый простой способ проверить это:

this.Option1.getText().then((elementText) => {
    console.log('a' + elementText + 'b');
});

Если он не печатает aI'll do itb - вы получите причину.

0 голосов
/ 17 февраля 2019

Спасибо за ответ.Строка не была равна, потому что одна строка имела «правильную одинарную кавычку» вместо апострофа.

0 голосов
/ 16 февраля 2019

Я не уверен, какие методы вы используете для объявления своих переменных или почему, поэтому я бы просто привел пример с моим способом.Чтобы сравнить объект со строкой, в этом случае я бы сделал следующее:

 var option1 = element(by.xpath()); // I'll do it

 var getOption1 = function() {
      return Option1.getText();
 };

 expect(getOption1()).toBe("I'll do it");

Надеюсь, это поможет.

...