Правильное тестирование потока аутентификации с помощью действий Redux Saga - PullRequest
0 голосов
/ 29 мая 2019

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

function

import { put, call, takeEvery } from "redux-saga/effects";

export function* loginSaga({ username, password }) {
  const creds = { username, password };
  try {
    let data = yield call(() => axios.get(ApiUrls.login, { params: creds }));
    yield put({ type: "LOGIN_SUCCESS", user: data });
  } catch (error) {
    yield put({ type: "LOGIN_FAILURE", error });
  }
}

test

    it("should return a user object on a successful login", () => {
      gen = loginSaga(success.creds);
      gen.next(); // call api
      expect(gen.next(loginResponse.success).value).toEqual(
        put({ type: "LOGIN_SUCCESS", user: loginResponse.success.data })
      );
    });

Но подождите минуту!Тест не учитывает учетные данные вообще!Мой тест проходит независимо от того, с какими учетными данными я звоню loginSaga(), потому что он на самом деле не выполняет вызов API, даже поддельный!

Я настроил эти объекты для подачи своих вызовов на fetchMock или axios-mock-adapter:

success = {
  url: ApiUrls.Login + "?username=testuser1&password=123123",
  creds: { username: "testuser1", password: "123123" }
};
badUser = {
  url: success.url.replace("testuser", "xxx"),
  creds: { username: "xxx", password: "123123" }
};
badPw = {
  url: success.url + "0",
  creds: { username: "testuser1", password: "1231230" }
};

Но этот метод тестирования не использует их!

Как я должен на самом деле сделать этот тест эффективным?

...