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

时间:2015-01-08 09:53:12

标签: jasmine protractor

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

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

问题是,因为getText()返回一个promise,当我进行比较时,屏幕上没有第一个元素,测试失败。

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

Jasmine expect()如何解决这个承诺?

提前致谢

2 个答案:

答案 0 :(得分:6)

这样的东西?

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

此处所有承诺都已明确解决,因此Jasmine不再需要解决任何承诺。

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

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

但是你无法得到textToConfirm同样的期望,因为它已经过了你所说的。

答案 1 :(得分:3)

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

$('#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());

因为在弹出窗口关闭后你会得到文本。