用玩笑嘲笑axios不会返回值

时间:2020-09-22 19:32:01

标签: javascript reactjs react-native testing jestjs

我正在对刷新用户jwt令牌的功能进行单元测试。在该功能内,必须发出后期请求。我正在模拟axios,并且在 mock 文件夹中指定数据时可以返回正确的数据。但是,我希望能够在测试本身中指定要解析的数据,因为我想使用不同类型的返回数据进行尝试。

//__mock__/axios.js
module.exports = {
  get: jest.fn(),
  post: jest.fn(),
  create: () => {
    return {
      get: () => {
        return {};
      },
      post: () => {
        return {};
      }
    };
  }
};

  //unit.test.tsx
      test.only('succesfully sets and gets auth token', async () => {
        const SecureStore = require('expo-secure-store');
        const data = {
          accessToken: 'token',
          refreshTOken: 'refresh'
        };
        let mockSetItemAsync;
        let mockGetItemAsync;
        mockSetItemAsync = jest.fn();
        mockGetItemAsync = jest.fn();
        mockGetItemAsync = jest
          .spyOn(SecureStore, 'getItemAsync')
          .mockImplementation(() => Promise.resolve({ token: 'token' }));
        mockSetItemAsync = jest
          .spyOn(SecureStore, 'setItemAsync')
          .mockImplementation(() => Promise.resolve({ success: true }));
        SecureStore.setItemAsync = mockSetItemAsync;
        SecureStore.getItemAsync = mockGetItemAsync;
    
        const mockAxios = jest
          .spyOn(mockedAxios, 'post')
          .mockImplementationOnce(() => Promise.resolve(data));
    
        await OAuth2.refreshAuth();
        expect(mockGetItemAsync).toHaveBeenCalled();
        expect(mockSetItemAsync).toHaveBeenCalled();
        expect(mockAxios).toHaveBeenCalledWith({ token: 'token' });
      });

但是,如果我在 mock 文件夹中这样指定数据,则不会返回任何值:

module.exports = {
  get: jest.fn(),
  post: jest.fn(() =>
    Promise.resolve({ data: { accessJWT: 'token', refreshJWT: 'refresh' } })
  ),
  create: () => {
    return {
      get: () => {
        return {};
      },
      post: () => {
        return {};
      }
    };
  }

我得到正确的返回值。 如何覆盖测试本身的返回值?

0 个答案:

没有答案