【发布时间】:2019-07-22 10:41:33
【问题描述】:
我需要为某些文本内容设置否定,并尝试了下面的代码,但由于文档中没有说明,我预计它会失败并且确实失败了,所以我想知道我如何才能实现否定这种情况。
await expect(element(by.id('myElemId'))).not.toHaveText('some text')
【问题讨论】:
标签: react-native testing e2e-testing detox
我需要为某些文本内容设置否定,并尝试了下面的代码,但由于文档中没有说明,我预计它会失败并且确实失败了,所以我想知道我如何才能实现否定这种情况。
await expect(element(by.id('myElemId'))).not.toHaveText('some text')
【问题讨论】:
标签: react-native testing e2e-testing detox
不幸的是,我不认为 Detox 有能力使用 expect 的 .not 属性
但是你可以这样:
首先创建一个函数,如果存在特定的文本短语,则返回布尔值。我们使用的事实是,如果一个值不存在,它将抛出错误,通过将其包装在 try/catch 中,我们可以返回一个布尔值,然后我们可以在测试中使用它。
async function hasText (id, text) {
try {
await expect(element(by.id(id))).toHaveText(text);
return true;
} catch (err) {
return false;
}
}
然后,如果它返回 true 以获得文本,则可以通过以下方式使用它并引发错误。
it('should not have some text', async () => {
await expect(element(by.id('myElemId'))).toBeVisible();
let result = await hasText('myElemId', 'some text');
// so if the text exists it will return true, as we don't want it to exist then we can throw our own error.
if (result) {
throw new Error('Should not have some text, but did.');
}
});
我知道这不是解决问题的好方法,如果 Detox 为我们提供所需的 API 会更好,但我想这可以在紧要关头使用。
【讨论】:
从 Detox 版本 17.11.4 开始,您可以这样做
await expect(element(by.id(options.testID))).toBeNotVisible()
或
await expect(element(by.text(options.text))).toBeNotVisible()
这是使用 Jest 推荐设置的正确方法。
【讨论】: