我需要为一些文本内容设置否定并尝试下面的代码,但因为它没有在文档中说明我预期它会失败并且确实如此,所以我想知道在这种情况下我怎么可能实现否定。
await expect(element(by.id('myElemId'))).not.toHaveText('some text')
不幸的是,我认为Detox有能力使用.not
的expect
属性
但是你可以这样:
首先创建一个函数,如果存在特定的文本短语,则返回布尔值。我们使用的事实是,如果一个值不存在,它会抛出并发生错误,通过将其包装在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会更好,但我想这可以用在紧要关头。