Реактивные инструменты тестирования + Jest. Не может сравниться два объекта - PullRequest
0 голосов
/ 06 мая 2018

Итак, я пытаюсь сделать небольшой тест для моего компонента Redux, и в этом тесте я отправляю только пустой объект obj {}. И попробуйте сравнить его в моем тестовом файле, как expect(get).toEqual(obj). Что я получил в журнале ошибок:

$ yarn test
yarn run v1.5.1
warning ..\..\..\..\package.json: No license field
$ react-scripts test --env=jsdom
 FAIL  src\saga\saga.test.js
  ● get new action value

expect(received).toEqual(expected)

Expected value to equal:
  {}
Received:
  {}

Difference:

- Expected
+ Received

-Object {}
+ {}

  at Object.<anonymous>.test (src/saga/saga.test.js:10:17)
      at new Promise (<anonymous>)
  at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
      at <anonymous>

× получить новое значение действия (15 мс)

Мой test.js файл:

import { put, call } from 'redux-saga/effects'
import { delay } from 'redux-saga'
import mySaga from './saga';

test('get new action value', () => {
    const get = mySaga();
    const data = 'hi1';
    const obj = {};

    expect(get).toEqual(obj);
});

Мой файл saga.js:

import { takeEvery, put, call, take } from 'redux-saga/effects'; 
import { delay } from 'redux-saga';

function* createSaga(action) {
    try {
        yield call(delay, 1000);
        yield put({type: "ADD_DAT", data: action.data + 1});
    } catch (e) { 
        console.log(e) 
    }
};

function* mySaga() {
    yield takeEvery("ADD_DATA", createSaga);
};

export default mySaga;

1 Ответ

0 голосов
/ 06 мая 2018

Когда вы вызываете const get = mySaga();, вы назначаете экземпляр генератора mySaga переменной get. Поскольку вы используете правильный Jest matcher, toEqual, для сравнения двух объектов ожидается ваш тестовый сбой.

Когда сравниваются ожидаемые и фактические значения, средство сопоставления toEqual (в конечном итоге) сравнивает прототипы сглаженных объектов. Прототип get будет '[object Generator]' не равен '[object Object]', и ваш тест не пройден.


Как предлагается в комментариях, взгляните на документацию по тестированию redux-saga , чтобы получить представление о том, как можно ускорить тестирование. Поскольку вы используете delay, вы, вероятно, также захотите взглянуть на Документы Jest для Timer Mocks , чтобы помочь вам подделать время.

...