2017-10-16 51 views
0

我写在量角器的考验,我写了一个函数2指望这样多个期望在一个单一的功能

this.Then(/^I should see a pane on the right with an Interactions and Remarks tab$/,() => { 
    return waitForPresence(mobileQADashboard.getTabPanel()).then(()=>{ 
     return mobileQADashboard.selectInteractionsTab().then(()=>{ 
      return waitForPresence(mobileQADashboard.pageElements.viewAllInteractionsLink).then(()=>{ 
      return expect(mobileQADashboard.pageElements.viewAllInteractionsLink.isDisplayed()).to.eventually.be.true; 

      }); 
     }); 
    }); 
    return waitForPresence(mobileQADashboard.getTabPanel()).then(()=>{ 
     return mobileQADashboard.selectRemarksTab().then(()=>{ 
      return waitForLoader().then(()=>{ 
       return waitForPresence(mobileQADashboard.pageElements.addRemarkButton).then(()=>{ 
        return expect(mobileQADashboard.pageElements.addRemarkButton.isDisplayed()).to.eventually.be.true; 
       }); 
      }) 
     }); 
    }) 

}); 

声明它是一个傻瓜证明methord,我想知道天气是正确的写一个这样的功能

回答

0

对我来说,它看起来像你过分了一下。量角器应该已经在正常情况下处理同步执行。

只要你的命令以列出的顺序执行(看起来像这样),你就不需要构建这样的金字塔。

虽然,当您使用then()时,您可以立即解决承诺,但您也可以开始新的异步任务,并让量角器继续使用then()以外的行。因此,当你在第2行输入第一个then()时,函数的第二部分与第一部分并行执行(不确定,如果这是有意的)。

关于expect在案件的中间:它的工作原理,尽管这不是最佳实践。如果你期望中间失败,测试用例会一直持续到结束,但测试用例状态仍然失败。更有可能你应该有两个测试用例,而不是一个。

this.Then(/^I should see a pane on the right with an Interactions and Remarks tab$/,() => { 
    waitForPresence(mobileQADashboard.getTabPanel()); 
    mobileQADashboard.selectInteractionsTab(); 
    waitForPresence(mobileQADashboard.pageElements.viewAllInteractionsLink); 
    expect(mobileQADashboard.pageElements.viewAllInteractionsLink.isDisplayed()).to.eventually.be.true; 

    //gets now executed after the firt expect. In your code it's executed in parallel to the first. 
    waitForPresence(mobileQADashboard.getTabPanel()); 
    mobileQADashboard.selectRemarksTab(); 
    waitForLoader(); 
    waitForPresence(mobileQADashboard.pageElements.addRemarkButton); 
    expect(mobileQADashboard.pageElements.addRemarkButton.isDisplayed()).to.eventually.be.true; 
}); 

也有expect里面的pageObject是不希望的。要编写一个测试用例(it() -block),您应该a)保持通过/失败的控制权并且b)同时不需要查看pageObject。你应该理解没有这个的测试用例。

因此,所有的一切适当的方式似乎更是这样的:

it(/first case/,function(){ 
    this.ThenFirst(); 
    expect(mobileQADashboard.pageElements.viewAllInteractionsLink.isDisplayed()).to.eventually.be.true; 
}); 
it(/second case/,function(){ 
    this.ThenSecond(); 
    expect(mobileQADashboard.pageElements.addRemarkButton.isDisplayed()).to.eventually.be.true; 
}); 

,然后将这些页面对象:

this.ThenFirst(/^I should see a pane on the right with an Interactions and Remarks tab$/,() => { 
    waitForPresence(mobileQADashboard.getTabPanel()); 
    mobileQADashboard.selectInteractionsTab(); 
    waitForPresence(mobileQADashboard.pageElements.viewAllInteractionsLink); 
}; 
this.ThenSecond(/^I should see a pane on the right with an Interactions and Remarks tab$/,() => { 
    waitForPresence(mobileQADashboard.getTabPanel()); 
    mobileQADashboard.selectRemarksTab(); 
    waitForLoader(); 
    waitForPresence(mobileQADashboard.pageElements.addRemarkButton); 
});