У меня есть следующий Redux создатель действий:Как модульное тестирование mapDispatchToProps с Thunk действием
export const keyDown = key => (dispatch, getState) => {
const { modifier } = getState().data;
dispatch({ type: KEYDOWN, key });
return handle(modifier, key); // Returns true or false
};
И следующий подключенный компонент:
export const mapDispatchToProps = dispatch => ({
onKeyDown: e => {
if(e.target.tagName === "INPUT") return;
const handledKey = dispatch(keyDown(e.keyCode));
if(handledKey) {
e.preventDefault();
}
}
});
Я пытаюсь написать тест, чтобы убедиться, что dispatch
вызывается с действием keyDown
, когда tagName
является чем-то другим, кроме "INPUT"
. Это мой тест:
import { spy } from "sinon";
import keycode from "keycodes";
import { mapDispatchToProps } from "./connected-component";
import { keyDown } from "./actions";
// Creates a simple Event stub...
const createEvent = (tag, keyCode) => ({
target: {
tagName: tag.toUpperCase()
},
preventDefault: spy(),
keyCode
});
it("Dispatches a keyDown event with the specified keyCode if the selected element is not an <input>",() => {
const dispatch = spy();
const keyCode = keycode("u");
mapDispatchToProps(dispatch).onKeyDown(createEvent("div", keyCode));
// This fails...
expect(dispatch).to.have.been.calledWith(keyDown(keycode));
});
Предположительно это как-то связано с использованием функций стрелок? Есть ли способ гарантировать, что отправка была вызвана с сигнатурой функции, которую я ожидаю?
Так вы тестируете, что строковое равенство и оператор return работают, или что разработчик не случайно удалил его? Боже, мне не нравятся большинство модульных тестов :( –
Прежде всего, что 'dispatch' на самом деле называется. Много раз я вызываю создателя действия, не переходя к отправке. Проверяя, что действие keyDown также передано, тоже важно:« ожидать (отправлять). to.have.been.called' не хватит, я не думаю, что я не думаю – CodingIntrigue