Jtest测试

10 篇文章 0 订阅
3 篇文章 0 订阅

RN

render

import {render} from '@testing-library/react-native';
describe('...', () => {
  test('.....', () => {
    const {getAllByTestId} = render(<组件名 />);
    const a = getAllByTestId('testID');
    expect(a).toHaveLength(4);// 长度
    expect(a).toHaveStyle({opacity: 0});// 样式
  });
  
  test('.....', () => {
    const {getByText} = render(
      <组件名/>,
    );
    const labelText = getByText('...');
    expect(labelText).toBeTruthy();// 存在文本
  });
  
  test('...', () => {
    const {getByText} = render(
      <RecoilRoot>
        <Consent />
      </RecoilRoot>,
    );

    const title = getByText('...');
    const body = getByText(RegExp('正则表达式'));

    expect(title).toBeTruthy();
    expect(body).toBeTruthy();
  });
}

act

import {act} from 'react-test-renderer';
test('...', () => {
  const {getByText, getByTestId} = render(
    <RecoilRoot>
      <Consent />
    </RecoilRoot>,
  );
  const nextButton = getByTestId('nextButton');
  act(() => {
    nextButton.props.onClick();
  });
  const errorMessage = getByText(
    '...',
  );
  expect(errorMessage).toBeTruthy();
});

fireEvent

import {fireEvent, render} from '@testing-library/react-native';
  test('...', () => {
    const {getByText, getByTestId} = render(
      <RecoilRoot>
        <Consent navigation={{navigate: jest.fn()}} />
      </RecoilRoot>,
    );
    const nextButton = getByTestId('nextButton');
    const checkboxContainer = getByTestId('checkboxContainer');
    fireEvent.press(checkboxContainer);
    act(() => {
      nextButton.props.onClick();
    });

    const errorMessage = getByText(
      '...',
    );

    expect(errorMessage).toBeTruthy();
  });
});

Mock Recoil

import {useRecoilValue} from 'recoil';
jest.mock('recoil');
describe('...', () => {
  it('...', () => {
    useRecoilValue.mockImplementation(() => ({
      firstName: jr,
      lastName: 'h',
    }));
    const {findAllByText} = render(<EnrollmentSuccessCard />);
    expect(findAllByText('jr h')).toBeTruthy();
  });
});
beforeEach(() => {
  useRecoilState.mockImplementation(() => [['', ''], jest.fn()]);
  useRecoilValue.mockImplementation(() => [
    '0623',
    '2306',
    ...pinCodeAntiPatterns,
  ]);
});

queryByText and queryByPlaceholderText

  • queryByText是用过text来查找对应的dom,没有找到会返回null,而getByText在没找到对应的DOM时会直接报错。
it('displays ...', () => {
  const {queryByPlaceholderText, queryByText} = render(
    <RecoilRoot>
      <组件 />
    </RecoilRoot>,
  );
  expect(queryByText('..')).toBeTruthy();
  expect(queryByPlaceholderText('...')).toBeTruthy();
});

Response

let mockAuthResponse = Promise.resolve();

jest.mock('../../../../modules/ec', () => ({
  ec: {
    a: () => mockAuthResponse,
    b: jest.fn().mockImplementation(() => ({
      catch: jest.fn(),
    })),
  },
}));

let mockMessageData = {};

jest.mock('@react-native-firebase/messaging', () => ({
  firebase: {
    messaging: jest.fn().mockImplementation(() => ({
      onMessage: jest.fn((callback) => callback({data: mockMessageData})),
    })),
  },
}));

const mockNavigation = {
  navigate: jest.fn(),
};

const updateLocation = jest.fn();

const mockLocationData = {
 ...
};
beforeEach(() => {
  mockMessageData = {};
  mockAuthResponse = Promise.resolve();
});

swr and mockResponseOnce

import {cache} from 'swr';
describe('..', () => {
  beforeEach(() => cache.clear());
  test('should display user name', () => {
    fetch.mockResponseOnce(
      JSON.stringify({first_name: 'First', last_name: 'Last'}),
    );

    const {queryByText} = render(
      <RecoilRoot>
        <PassCard />
      </RecoilRoot>,
    );

    act(() => {
      jest.runAllTicks();
    });

    expect(queryByText('First Last')).toBeTruthy();
  });
});

navigation

import {cache} from 'swr';
const navigation = {
  reset: jest.fn(),
  navigate: jest.fn(),
};

describe('..', () => {
  beforeEach(() => cache.clear());
  it('.....', () => {
    const {getByLabelText} = render(
      <RecoilRoot>
        <Home navigation={navigation} route={{}} />
      </RecoilRoot>,
    );
    act() => {
      jest.runAllTicks();
    });
    fireEvent.press(getByLabelText('a'));
    expect(navigation.reset).toBeCalledWith({
      routes: [
        {
          name: '..',
          state: {
            routes: [{name: '..'}],
          },
        },
      ],
    });
  });

react

renderHook

jest.mock('../useErrorHandling');
jest.mock('swr');
jest.mock('../../utils/isFCMSupported');
describe('..', () => {
  test('...', () => {
    const locationIds = [];
    isFCMSupported.mockReturnValue(true);
    renderHook(() => useActivityLog({locationIds}));
    expect(useSWR).toBeCalledWith(null, fetcher, {refreshInterval: 0});
  });

  test('...', async () => {
    const locationIds = ['1234'];

    useSWR.mockReturnValue({data: mockActivityLogData});
    fetch.mockResolvedValueOnce({json: () => ..});
    const {.., ..} = renderHook(() =>
      useActivityLog({locationIds})
    );
    await waitForNextUpdate();

    expect(result.current.logs).toEqual([
      {
       ...
  });
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值