可以在每个测试中使用device.setLocation()吗?

时间:2019-06-06 14:15:40

标签: detox

想象一下一个屏幕,在该屏幕上有一系列建筑物,这些建筑物与建筑物的距离从设备的当前位置开始显示。该列表计算安装座上的距离,并且仅在刷新时计算。

这就是我编写此测试的方式,

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)如果我要模拟用户的移动并在屏幕上看到变化,那有什么更好的方法呢?

0 个答案:

没有答案