想象一下一个屏幕,在该屏幕上有一系列建筑物,这些建筑物与建筑物的距离从设备的当前位置开始显示。该列表计算安装座上的距离,并且仅在刷新时计算。
这就是我编写此测试的方式,
beforeAll(async () => {
const launchParams = {
permissions:
{
location: 'inuse'
}
};
await launchApp(launchParams);
await device.setLocation(office.lat, office.lon);
...
});
此测试成功
it.only('should show <building_name> distance as 15.6km', async () => {
await inputSearchQuery({ query: '<building_name>' });
await expectElementByIdToHaveText({ elementId: TestID.DISTANCE, ancestorId: 'b1da9f0d-218e-4a8f-ab65-bdf1eb3b9764', text: ' 15.6km' });
});
然后,我要模拟靠近建筑物的位置,然后用户刷新列表。所以,
it.only('should show <building_name> distance as 29m after changing location', async () => {
await device.setLocation(closeToBuilding.lat, closeToBuilding.lon);
await inputSearchQuery({ query: '<building_name>' });
await element(by.id(TestID.BUILDINGS_SECTION_LIST)).swipe('down');
await expectElementByIdToHaveText({ elementId: TestID.DISTANCE, ancestorId: 'b1da9f0d-218e-4a8f-ab65-bdf1eb3b9764', text: ' 29m' });
});
在这种情况下,报告的距离与我在beforeAll()中设置的相同,而不是在test()中。 但是,如果我将此测试取出到其自己的文件中,则它将按预期工作(显然,因为我在beforeAll()中正确设置了位置)。
我的问题是 1)我们只能在beforeAll()中设置位置吗? 2)我们不能在测试文件中多次设置位置吗? 3)如果我要模拟用户的移动并在屏幕上看到变化,那有什么更好的方法呢?