我已经在 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 语句中运行它时,我得到了错误:
无法读取未定义的属性“调用”
我不知道为什么会出现这个错误,因为所有其他期望都运行,如果我只注释掉一个语句,那么套件的其余部分也运行良好。出于某种原因,它只是在一个期望语句上出错。
显然数据已被删除,但不影响它的运行方式。