我试图在页面对象内创建一个方法,该方法执行特定的测试,而我将经常使用该测试。我遵循了documentation example,但这是用于键入/单击,也许不能与expect
一起使用?
AssertionError: expected undefined to be truthy
该错误专门指向我的测试中的这一行:
await t.expect(await page.nameTextInput.isRequired()).ok()
它正在我的页面对象模型中使用的“ TextInputFeature”中调用isRequired
检查:
export default class TextInputFeature {
constructor(model) {
this.input = AngularJSSelector.byModel(model);
this.label = this.input.parent().prevSibling('label');
this.asterisk = this.label.find('.required');
}
async isRequired() {
await t
.expect(this.input.hasAttribute('required')).ok()
.expect(this.asterisk.exists).ok();
}
}
编辑:以下“有效”:
await t
.expect(...)
.click(...)
.expect(...)
await page.racTextInput.isRequired();
await t
.expect(...)
...但是我的目标是允许链接:
await t
.expect(...)
.click(...)
.expect(page.racTextInput.isRequired()).ok()
.expect(...)
答案 0 :(得分:3)
我在您的代码中发现了一些错误。请检查一下。
1)isRequired
方法不返回任何内容,这就是为什么获得undefined
的原因。
2)我认为您不需要将isRequired
方法包装在单独的expect
调用中。只写await page.nameTextInput.isRequired()
应该足够了
3)您错过了t
方法中的isRequired
参数,但是,我认为这只是一个错字
已更新:
测试页:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<label>Name
<div class="required">*</div>
</label>
<input required="required" type="text" id="name">
</body>
</html>
测试代码:
import { Selector } from 'testcafe';
class TextInputFeature {
constructor () {
this.input = Selector('input#name');
this.label = Selector('label');
this.asterisk = this.label.find('.required');
}
async isRequired () {
const hasRequiredAttribute = await this.input.hasAttribute('required');
const asteriskExists = await this.asterisk.exists;
return hasRequiredAttribute && asteriskExists;
}
}
fixture`fixture`
.page`../pages/index.html`;
test(`test`, async t => {
const inputFeature = new TextInputFeature();
await t
.click(inputFeature.label)
.expect(await inputFeature.isRequired()).ok()
.click(inputFeature.label);
});