Как смоделировать вызов служебной функции с помощью jest? - PullRequest
0 голосов
/ 14 апреля 2019

Я тестирую служебную функцию, которая возвращает целое число, я пытаюсь симулировать его вызов, но не могу найти правильный способ сделать это даже после нескольких часов поиска в Google.

I 'Мы также попробовали spyOn(), но это не сработало.

Authentication.js

export function auth(username) {
  AsyncStorage.getItem('@app:id').then((id) => {
    if (id === username) {
      return 1;
    }
    return 0;
  });
}

Authentication.test.js

import 'react-native';
import React from 'react';
import renderer from 'react-test-renderer'; // Note: test renderer must be required after react-native.
import mockAxios from 'axios';
import mockAsyncStorage from '@react-native-community/async-storage';
import auth from '../App/Utils/Authorization';

test('should check whether the user whose username is entered as a paramter is the same as the user logged in the application', () => {
  auth = jest.fn();
  expect(auth).toHaveReturned();
  expect(mockAsyncStorage.getItem).toHaveBeenCalledTimes(1);
  expect(mockAsyncStorage.multiRemove).toHaveBeenCalledWith('@app:id');
});

Я ожидалсимуляция вызова auth() и успешное тестирование, вместо этого я получаю ошибку "auth" is read-only в качестве вывода при запуске yarn test.

1 Ответ

0 голосов
/ 14 апреля 2019

Вы переназначаете импортированный элемент auth и не используете jest.fn() так, как это должно работать. Вызов функции jest mock вернет undefined, вместо этого с mockFn.mockImplementation (fn) вы можете привязать свою функцию к mock и проверить, что она вызывается, или вернуть какое-то ожидаемое значение.

import auth from '../App/Utils/Authorization';

test('Test auth', () => {
    const mockAuth = jest.fn().mockImplementation(auth);
    mockAuth();
    expect(mockAuth).toHaveBeenCalled();
}

Вы можете проверить вывод вашей функции, проверяя mockFn.mock.results , в которой хранятся результаты каждого вызова, выполненного через вашу функцию вызова.

test('when user is provided', () => {
    mockAuth({ user: {id: 'test', name: 'test'} });
    expect(mockAuth).toHaveBeenCalled();

    const result = mockAuth.mock.results[0].value;
    expect(result).toBe(1);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...