React Native 无法找到具有testID的元素:

50few1ms  于 2022-12-04  发布在  React
关注(0)|答案(1)|浏览(217)

我正在使用Jest测试我的React Native应用程序,但遇到了很多麻烦。其中一个错误是:Unable to find an element with testID: loginButton
这是我的JSX代码:

<Button
 testID="loginButton"
 onPress={() => navigation.navigate('Home')}>
 Join for free
</Button>

和我的测试代码:

import React from 'react';
import Login from '../screens/Login';
import {fireEvent, render} from '@testing-library/react-native';

    describe('Login screen', () => {
      it('should go to dashboard', () => {
        const navigation = {navigate: () => {}};
        jest.spyOn(navigation, 'navigate');
    
        const page = render(<Login navigation={navigation} />);
        const loginButton = page.getByTestId('loginButton');
    
        fireEvent.press(loginButton);
    
        expect(navigation.navigate).toHaveBeenCalledWith('Home');
      });
    });

编辑:如果我执行const loginButton = page.queryAllByTestId('loginButton');,则测试通过。
我做错了什么?谢谢!

kmbjn2e3

kmbjn2e31#

我忘了提到我使用的是NativeBase,我的应用程序被 Package 在一个<NativeBaseProvider>中。要解决上述问题,您可以在测试中简单地将initialWindowMetrics传递给NativeBaseProvider。

const inset = {
  frame: { x: 0, y: 0, width: 0, height: 0 },
  insets: { top: 0, left: 0, right: 0, bottom: 0 },
};

<NativeBaseProvider initialWindowMetrics={inset}>
  {children}
</NativeBaseProvider>;

相关问题