【问题标题】:chai.assert() wont run methods in a test before the assertion (chai assert lib with protractor)chai.assert() 在断言之前不会在测试中运行方法(chai assert lib with protractor)
【发布时间】:2015-08-02 22:28:54
【问题描述】:

我第一次在 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 库断言。

  • 使用当前代码,断言将返回 true,因为它看到了 infoTab,并且测试将失败,而无需运行断言之前的任何方法

  • 如果我将断言行更改为查找 '!== true',那么它将运行方法并继续

在任何情况下,以不同的方式执行此操作会更好还是使用期望而不是断言更好?

Chai assert API

Chai expect API

【问题讨论】:

    标签: protractor assert chai e2e-testing


    【解决方案1】:

    所有 Protractor 函数调用都会返回异步解析的承诺,因此如果您在 createNewService 上定义的函数都在调用 Protractor 函数,则您必须等待它们解析后再调用断言。尝试以下方法:

    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() 返回一个承诺。
    • 您需要使用像chai-as-promised 这样的库来处理对从promise 返回的值的断言。在您的代码中,您断言承诺对象 == true,由于强制,这是真实的。
    • 由于您的函数是异步运行的,因此您需要将回调传递给匿名函数,然后在测试完成时调用它。可以在here找到有关测试异步代码的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多