Как проверить `select(reselectSelector)` с жасмином?
Я создаю приложение React и использую реактивный шаблон в качестве базового проекта. После ознакомления с Redux, Sagas, повторным выбором и запуском первых компонентов я хотел бы написать соответствующие модульные тесты. Но, к сожалению, я не могу получить тест для оператора select с соответствующим селектором для проверки:
const selectDomain = () => (state) => state.get('myDomain');
const selectDomainMessage = () => createSelector(selectDomain(), (domain) => domain.get('message'));
function* send() {
const message = yield select(selectDomainMessage());
...
yield put(sentAction(message);
}
describe('send Saga', () => {
const generator = send();
it('should return select descriptor', () => {
let expectedDescriptor = select(selectDomainMessage());
let returnedDescriptor = generator.next().value;
expect(returnedDescriptor).toEqual(expectedDescriptor);
});
});
С моей точки зрения, этот тест должен работать, но он терпит неудачу с (не очень полезным) сообщением об ошибке:
Ожидаемый объект ({ @@redux-saga/IO: true, SELECT: Object({ selector: Function, args: [ ] }) }) равен объекту ({@@ redux-saga / IO: true, SELECT: Object ({селектор: функция, аргументы: [ ] }) }).
Чтобы легче воспроизвести проблему, я создал JSFiddle с необходимой средой. Может быть, кто-то может сказать мне, что я делаю не так.
1 ответ
Ваш тест не пройден, потому что функции выбора в ожидаемом и фактическом случаях не являются ссылочно-эквивалентными.
Функция selectDomainMessage
возвращает функцию, возвращаемую createSelector
; и каждый раз createSelector
работает, он возвращает новую функцию.
Чтобы ваш тест прошел, вы можете захватить функцию возврата createSelector
как переменная и иметь selectDomainMessage
верните что:
const selector = createSelector(selectDomain(), (domain) => domain.get('message'))
const selectDomainMessage = () => selector;
Модифицированный JSFiddle