Saga unit test deepEqual все равно возвращает false - PullRequest
0 голосов
/ 15 января 2019

Я довольно новичок в Redux-saga и работаю над модульным тестированием. Тестовый код функции вызова API возвращает false, даже если он выглядит идентично. Чего мне не хватает?

[Действия]

export const actions = {
  readUsers: {
    read: (data) => util.createAction('READ_USER', data),
    request: () => util.createAction('READ_REQUEST'),
    success: (data: any) => util.createAction('READ_SUCCESS', data),
    failure: (error: any) => util.createAction('READ_FAILURE', error)
  }
};

[Функция генератора]

export function* fetchUsers(action) {
  yield put(actions.readUsers.request());
  try {
    let data = {id: action.payload.id, option: action.payload.option};
    let response = yield call(API().getUsers, data);
    if (response) {
      yield put(actions.readUsers.success(response.users));
    } else {
      yield put(actions.readUsers.failure(response.error));
    }
  } catch (error) {
    yield put(actions.readUsers.failure(error));
  }
};

[Юнит тест]

const id = 'user-id';
const option = {};
const result = {users: []};
const action = {payload : {id, option}};
describe('user-saga', () => {
  describe('fetchUsers', () => {
    const generator = fetchUsers(action);
    it('should return actions.readUsers.request()', () => {
      assert.deepEqual(generator.next().value, put(actions.readUsers.request()));
    }); // PASS

    it('should return the Api.getUsers call', () => {
      assert.equal(generator.next(result).value, call(Api().getUsers, action.payload));
    }); // FAIL

    it('should return actions.readUsers.success()', () => {
      assert.deepEqual(generator.next(result).value, put(actions.readUsers.success(result)));
    }); // FAIL

    it('should be finished', () => {
      assert.deepEqual(generator.next().done, true);
    }); // PASS
  })
});

[Тестовый вывод]

Первый тест пройден.

Второй тест не пройден с этим сообщением об ошибке

 AssertionError: { '@@redux-saga/IO': true,
    CALL: { context: null, fn: [Function: getUsers], args: [ [Object] ] } } deepEqual { '@@redux-saga/IO': true,
    CALL: { context: null, fn: [Function: getUsers], args: [ [Object] ] } }

Третий тест не пройден с этим сообщением об ошибке

AssertionError: undefined deepEqual { '@@redux-saga/IO': true,
 PUT: { channel: null,
       action: { type: 'READ_SUCCESS', users: undefined } } }
...