如何测试React组件内部的API调用

时间:2018-07-17 20:08:21

标签: reactjs testing jestjs enzyme expect.js

将Jest与Expect.js和酶一起使用我正在测试HOC,它会用特殊的道具丰富组件。此HOC的功能之一是它调用getter api promise并通过道具传递此promise的结果。我目前正在测试loadedloading标志。

它正在进行中,但请在此处查看HOC:

https://github.com/dealperch/dealperch-auth/blob/5de56f9603e609b54712fbe728140a81ef67bf59/js/components/WithAuth/index.js

我目前正在进行的测试可以在这里找到:

https://github.com/dealperch/dealperch-auth/blob/5de56f9603e609b54712fbe728140a81ef67bf59/js/components/WithAuth/WithAuth.test.js#L106-L121

这是一个片段:

it("Provides proper loading flags when done", async () => {

        MountedDummyFormWithAuth = CreateDummyFormWithAuth();

        setTimeout(()=>{}, 3050);

        await waitForExpect(()=>{
            let testForm = MountedDummyFormWithAuth.find('TestFormEdit');

            console.log(testForm.props());

            expect(testForm.prop('loaded')).toEqual(true);
            expect(testForm.prop('loading')).toEqual(false);
        });

    });

模拟API只是带有返回对象的超时功能的简单承诺。

返回此对象后,HOC将通过prop更新TestFormComponent。因此loading =否,loaded = true。由于某些原因,testForm实例的道具仍设置为加载。我在实际环境中使用了完全相同的设置来使用完全相同的组件,并且可以正常工作。我的猜测是:

a)由于我在testForm方法中无法理解的某些行为,mount实例未更新。 b)尚未等待此设置的超时,并且waitForExpect

是否有测试此情况的正确方法?组件正在等待要实现的承诺,因此应在过渡期间将其道具设置为加载,然后,一旦实现承诺,HOC就会更新加载道具。所有这些都应该在1500ms内发生。

我猜想我会像动画那样测试它,该动画的组件样式必须在0ms处匹配bar然后在1500ms处匹配foo。但是我不知道该如何测试...任何帮助将不胜感激。

0 个答案:

没有答案