量角器从promise中返回一个值

时间:2015-08-03 06:31:11

标签: angularjs coffeescript protractor

我正在编写一个测试,通过查看屏幕上包含级别数的文本值来查看我的代码是否正在删除级别。

  it 'allows deleting level versions', ->
    browser.get('/api#/costings')
    element(By.id("edit")).click()
    startCount = element(By.id("versions_count")).getText().then( (count) ->
      return count
    )

    element(By.id("versions")).click()
    first=element.all(By.id("listing")).first()
    first.element(By.id("delete")).click()
    helper.accept_dialog()

    element(By.id("back")).click()
    expect(element(By.id("versions_count")).getText()).toEqual(startCount - 1)

这里的问题是startCount导致函数。我似乎无法将startCount变为整数,以便我可以看到计数是否减少了1项。

它给了我错误;

  1) edit an existing costing allows deleting level versions
   Message:
     Expected '1' to equal NaN.

如果我尝试使用parseInt(startCount),我会得到同样的错误。

2 个答案:

答案 0 :(得分:2)

变量startCount是一个承诺,因此startCount - 1没有意义:没有从承诺到其已解析值的自动类型转换,因此您无法从中减去一个

您可以做的是创建一个承诺,其解析值是预期版本计数:

expectedCount = element(By.id("versions_count")).getText().then( (count) ->
  return (count - 1).toString();
)

然后你可以将这个承诺传递给toEqual,因为它会在控制流程的适当位置自动解包承诺

expect(element(By.id("versions_count")).getText()).toEqual(expectedCount)

答案 1 :(得分:0)

it("Verify Add Element", function(){
        basePage.gotoAssetsPage();
        var numberOfElementsBefore = assetsPage.getTotalAssertsNumber();//get text from counter
        assetsPage.createAsset(); // add one object on the page
        var numberOfElementsAfter = assetsPage.getTotalAssertsNumber(); // get text from counter after creation of object

        numberOfElementsBefore.then(function(startNumberText) {
            console.log("Number of Asserts before test is " + startNumberText);
            return startNumberText;
        });
        numberOfElementsAfter.then(function(endNumberText) {
            console.log("Number of Asserts after test is " + endNumberText);
            expect(assertsBefore).toBe((endNumberText-1).toString());
        });   
    });

在这个测试中我验证,文本前的元素数量将等于测试后减去1的元素数量。 如果我不使用.toString(),测试结果将是: Expect' 21'是21 。所以,转换为字符串工作。也许有人有更好的解决方案:)