Jasmine 'expect' 如何等待量角器承诺解决

how does Jasmine 'expect' waits for a protractor promise to resolve

我正在进行端到端测试。 在单击按钮之前,我有一个页面上不存在的确认弹出窗口。 创建确认弹出窗口后,我从那里的元素中获取文本。

之后,我单击“确定”按钮,这会导致从 DOM 中删除确认弹出窗口,并向 DOM 添加一个新元素,其值为我之前获得的文本。

问题是,因为 getText() returns 一个承诺,当我进行比较时,第一个元素不在屏幕上并且测试失败。

如果我确实希望屏幕上出现确认弹出窗口时,我可以看到确认弹出窗口元素的文本。

Jasmine expect() 如何解析 promise?

提前致谢

是这样的吗?

element(by.id('dangerous-activity')).click().then(function () {
  element(by.id('confirmation-text')).getText().then(function (textToConfirm) {
    element(by.id('confirm-button')).click().then(function () {
      element(by.id('new-element')).getText().then(function (newText)) {
        expect(newText).toBe(textToConfirm);
      });
    });
  });
});

这里所有的 promise 都被显式 resolve,所以 Jasmine 不需要再 resolve 任何 promise。

您可以让 expect 解决 new-element 承诺,将最后两行替换为:

    ....
      expect(element(by.id('new-element')).getText()).toBe(textToConfirm);
    ....

但是您无法以同样的期望获得 textToConfirm,因为它已经按照您的指示消失了。

这应该是做你想做的最简单的方法:

$('#open-popup').click();
var textToConfirm = $('#popup-text').getText();
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirm);

注意这不起作用:

$('#open-popup').click();
var textToConfirmElement = $('#popup-text');
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirmElement.getText());

因为这里是在弹出窗口关闭后得到的文本。