1

我已经在 react native 中构建了一个应用程序,现在正在更新一些旧的测试套件。运行错误的测试是使用反应测试渲染器来模拟屏幕功能的组件测试。

错误摘要:其中一个期望语句抛出错误说

无法读取未定义的属性“调用”

当值存在时,我可以像这样打印出属性调用 console.log(store.dispatch.mock.calls[6][0]); ,它给了我预期的值。

代码:

//Imports
jest.spyOn(Date, "now").mockImplementation(() => 1479427200000);
const mockStore = configureStore([]);

describe("block1", () => {
    it("test1", async done => {
        try {
            let component;
            let store = mockStore(stores.SummaryR1);
            store.dispatch = await jest.fn();
            const mockDate = new Date(1466424490000);
            const spy = jest.spyOn(global, "Date").mockImplementation(() => mockDate);
            Date.now = jest.fn(() => 1466424490000);
            await act(async () => {
                component = await renderer.create(
                    <PaperProvider>
                        <Provider store={store}>
                            <Receive_Signature />
                        </Provider>
                    </PaperProvider>
                );
            });
            const expected = await component.toJSON();
            expect(expected).toMatchSnapshot();

            await act(async () => {
                //action
            });
            await act(async () => {
                //action
            });
            await act(async () => {
                //action
            });
            await act(async () => {
                //action
            });
            await act(async () => {
                //action
            });
            expect(store.dispatch).toHaveBeenCalledTimes(8);
            expect(store.dispatch).toHaveBeenNthCalledWith(1, {results1});
            expect(store.dispatch).toHaveBeenNthCalledWith(2, {results2});
            expect(store.dispatch).toHaveBeenNthCalledWith(3, {results3});
            expect(store.dispatch).toHaveBeenNthCalledWith(4, {results4});
            expect(store.dispatch).toHaveBeenNthCalledWith(5, {results5});
            expect(store.dispatch).toHaveBeenNthCalledWith(6, {results6});
            expect(store.dispatch).toHaveBeenNthCalledWith(7, {results7} );
            expect(store.dispatch).toHaveBeenNthCalledWith(8, {results8});
            expect(navigateToScreen).toHaveBeenCalledTimes(1);
            expect(navigateToScreen.mock.calls[0][0]).toEqual("Processor_Dashboard");

            done();
        } catch (error) {
            done.fail(error);
        }
    }, 15000);

该错误是在第 7 次调用的测试结果 7 中形成的。

首先我知道有 8 个电话是因为 expect(store.dispatch).toHaveBeenCalledTimes(8);

然后我还可以打印出 results7,并查看我的 results7 数据是否正确。但是当我在 jest expect 语句中运行它时,我得到了错误:

无法读取未定义的属性“调用”

我不知道为什么会出现这个错误,因为所有其他期望都运行,如果我只注释掉一个语句,那么套件的其余部分也运行良好。出于某种原因,它只是在一个期望语句上出错。

显然数据已被删除,但不影响它的运行方式。

4

0 回答 0