Protractor assert()不会在断言之前的测试中运行方法(带有量角器的chai assert lib)

Protractor assert()不会在断言之前的测试中运行方法(带有量角器的chai assert lib),protractor,assert,chai,e2e-testing,Protractor,Assert,Chai,E2e Testing,我第一次在SO上发布一个问题,我希望我做得对 it (' :: 2.0 service creation :: should fill out service info tab', function(){ createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName); createNewService.selectCategory(); createNewService.setI

我第一次在SO上发布一个问题,我希望我做得对

it (' :: 2.0 service creation :: should fill out service info tab', function(){
    createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
    createNewService.selectCategory();
    createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
    createNewService.selectParent();
    createNewService.uploadIcon();
    createNewService.nextTab();
    //right now assert will fire off without running the methods above because
    //we are still on the infoTab
    assert(($(createNewService.selectors.infoTab).isDisplayed()) == true, 'did not move to the next tab');
},20000);
此测试所做的是填充输入,在必要时选择下拉列表并上载文件

然后,测试尝试切换到小部件中的下一个选项卡

为了确定它是否能够切换到下一个选项卡,我想用一条自定义消息进行chai库断言

  • 对于当前代码,assert将返回true,因为它看到infoTab,并且测试将失败,而不会在assert之前运行任何方法

  • 如果我更改断言行以查找'!==是的,那么它将运行这些方法并继续

在任何情况下,以不同的方式执行此操作是否更好,或者使用expect而不是assert


所有量角器函数调用都返回异步解析的承诺,因此,如果在
createNewService
上定义的函数都在调用量角器函数,则在调用断言之前必须等待它们解析。请尝试以下操作:

it (' :: 2.0 service creation :: should fill out service info tab', function(done) {
  createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
  createNewService.selectCategory();
  createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
  createNewService.selectParent();
  createNewService.uploadIcon();
  createNewService.nextTab().then(function() {
    assert.eventually.strictEqual($(createNewService.selectors.infoTab).isDisplayed(), true, 'did not move to the next tab');
    done();
  });
},20000);
需要注意的几点:

  • 本例假设
    createNewService.nextTab()
    返回承诺
  • 您需要使用类似于库的方法来处理从承诺返回的值的断言。在代码中,您断言promise对象==true,这是由于强制而真实的
  • 由于函数是异步运行的,所以需要向匿名函数传递回调,然后在测试完成时调用它。可以找到有关测试异步代码的信息