Сделать юнит-тест с шуткой для функции - PullRequest
0 голосов
/ 15 декабря 2018

Я начал свой первый юнит-тест в полдень.Пять первых тестов, которые мне нужно сделать, касаются тестирования функций возврата.Не так сложно.

Но мне трудно понять, как выполнить модульное тестирование моей функции входа в систему, которая возвращает то, чего я пока не понимаю.Кто-то видит, что я должен поместить в свой action.test.js, покажите мне и объясните мне?

Как я могу тестировать вход в систему и что представляет собой диспетчеризацию, возвращающую функцию входа?

<code>**In action.js**

<pre>
import { userConstants } from '../shared/constants';
import { userService } from '../shared/services';
import { history } from '../shared/helpers';

function request(user) {
  return { type: userConstants.LOGIN_REQUEST, user };
}
function success(user) {
  return { type: userConstants.LOGIN_SUCCESS, user };
}
function failure(error) {
  return { type: userConstants.LOGIN_FAILURE, error };
}

function login(username, password) {
  return (dispatch) => {
    dispatch(request({ username }));

    userService.login(username, password).then(
      (user) => {
        dispatch(success(user));
        history.push('/');
      },
      (error) => {
        dispatch(failure(error));
        console.error(error); // eslint-disable-line no-console
      },
    );
  };
}

function logout() {
  userService.logout();
  return { type: userConstants.LOGOUT };
}

function oldLogin() {
  return { type: userConstants.OLD_LOGIN };
}

export const userActions = {
  login,
  logout,
  oldLogin,
};
** В service.js **
function logout() {
  // remove user from local storage to log user out
  if (localStorage.getItem('user')) {
    localStorage.removeItem('user');
  }
}

function handleResponse(response) {
  return response.text().then((text) => {
    const data = text && JSON.parse(text);

    if (!response.ok) {
      if (response.status === 401) {
        // auto logout if 401 response returned from api
        logout();
        window.location.reload(true);
      }

      const error = (data && data.message) || response.statusText;
      return Promise.reject(error);
    }

    return data;
  });
}


function login(username, password) {
  return fetch(
    'https://mon-api',
    {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username,
        password,
        context: {
          deviceToken: '1cb1b51d19665cb45dc1caf254b02af',
        },
      }),
    },
  )
    .then(handleResponse)
    .then((user) => {
      // login successful if there's a jwt token in the response
      if (user.sessionToken) {
        // store user details and jwt token in local storage to
        // keep user logged in between page refreshes
        localStorage.setItem('user', JSON.stringify(user));
      }

      return user;
    });
}

export const userService = {
  login,
  logout,
};

1 Ответ

0 голосов
/ 15 декабря 2018

dispatch - это избыточное действие.Чтобы быть в состоянии проверить, вы должны издеваться над ним.Существуют такие утилиты, как redux-mock-store , которые облегчают эту задачу, для получения более подробной информации обратитесь к следующей статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...