chai.assert() 不会在断言之前的测试中使用 运行 方法(chai assert lib with protractor)
chai.assert() wont run methods in a test before the assertion (chai assert lib with protractor)
我第一次 post 关于 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 库断言。
使用当前代码,断言将 return 为真,因为它看到了 infoTab,如果没有 运行ing 断言之前的任何方法,测试将失败[=15] =]
如果我更改断言行以查找“!== true”,那么它会运行 方法并继续
无论如何,以不同的方式执行此操作或者使用 expect 而不是 assert 会更好吗?
所有 Protractor 函数调用 return 承诺异步解析,因此如果您在 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()
return 是一个承诺。
- 您将需要使用像 chai-as-promised 这样的库来处理对 return 从承诺中编辑的值的断言。在您的代码中,您断言一个 promise 对象 == true,由于强制转换,它是真实的。
- 由于您的函数 运行 是异步的,因此您需要将回调传递给匿名函数,然后在测试完成时调用它。可以找到有关测试异步代码的信息 here。
我第一次 post 关于 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 库断言。
使用当前代码,断言将 return 为真,因为它看到了 infoTab,如果没有 运行ing 断言之前的任何方法,测试将失败[=15] =]
如果我更改断言行以查找“!== true”,那么它会运行 方法并继续
无论如何,以不同的方式执行此操作或者使用 expect 而不是 assert 会更好吗?
所有 Protractor 函数调用 return 承诺异步解析,因此如果您在 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()
return 是一个承诺。 - 您将需要使用像 chai-as-promised 这样的库来处理对 return 从承诺中编辑的值的断言。在您的代码中,您断言一个 promise 对象 == true,由于强制转换,它是真实的。
- 由于您的函数 运行 是异步的,因此您需要将回调传递给匿名函数,然后在测试完成时调用它。可以找到有关测试异步代码的信息 here。