如何在 Detox 中添加像 not.toHaveText 这样的否定断言?
How to add negative assertions like not.toHaveText in Detox?
我需要为一些文本内容设置否定并尝试了下面的代码,但由于文档中没有说明,我预计它会失败,而且确实失败了,所以我想知道我怎么可能实现在这种情况下否定。
await expect(element(by.id('myElemId'))).not.toHaveText('some text')
不幸的是,我不认为 Detox 有能力使用 .not
属性 of expect
但是你可以这样做:
首先创建一个函数,如果特定的文本短语存在,return它是一个布尔值。我们使用的事实是,如果一个值不存在,它将抛出错误,通过将其包装在 try/catch
中,我们可以 return 一个布尔值,然后我们可以在我们的测试中使用它。
async function hasText (id, text) {
try {
await expect(element(by.id(id))).toHaveText(text);
return true;
} catch (err) {
return false;
}
}
然后您可以按以下方式使用它,如果它 return 具有文本是正确的,则抛出错误。
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 推荐设置的正确方法。
我需要为一些文本内容设置否定并尝试了下面的代码,但由于文档中没有说明,我预计它会失败,而且确实失败了,所以我想知道我怎么可能实现在这种情况下否定。
await expect(element(by.id('myElemId'))).not.toHaveText('some text')
不幸的是,我不认为 Detox 有能力使用 .not
属性 of expect
但是你可以这样做:
首先创建一个函数,如果特定的文本短语存在,return它是一个布尔值。我们使用的事实是,如果一个值不存在,它将抛出错误,通过将其包装在 try/catch
中,我们可以 return 一个布尔值,然后我们可以在我们的测试中使用它。
async function hasText (id, text) {
try {
await expect(element(by.id(id))).toHaveText(text);
return true;
} catch (err) {
return false;
}
}
然后您可以按以下方式使用它,如果它 return 具有文本是正确的,则抛出错误。
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 推荐设置的正确方法。