У меня есть форма. Когда пользователь переходит с шага 1 на шаг 2, код проверяет все обязательные поля на шаге 1, а затем перемещает пользователя на шаг 2. Когда пользователь переходит на шаг 2, 3 или 4 и нажимает кнопку Обновить или открывает URL-адрес в новом окне. , они перенаправлены на вступительную страницу.
Моя проблема - тестирование кода и что тестировать.
Я использую React, Redux, Jest и Sinon.
// actions.js
export const redirectToIntroPage = () => (dispatch, getState) => {
const fields = {
field1: getState().app.inputs.field1,
field2: getState().app.inputs.field2,
field3: getState().app.inputs.field3,
};
if (objHasNullValue(fields)) {
goToPage(PAGES.INTRODUCTION);
}
};
getState()
вызывается несколько раз, потому что мне нужны только указанные ключи. app
имеет множество других вещей, которые мне не нужны.
// parsing.js
export const objHasNullValue = obj => {
for (var property in obj) {
if (isNull(obj[property]) === true) {
return true;
}
}
return false;
};
goToPage
говорит само за себя.
// action.test.js
describe('redirect to intro page', () => {
let sandbox, fakeDispatch, fakeState, goToPage;
const fakeGetState = () => (fakeState);
beforeEach(() => {
sandbox = sinon.createSandbox();
fakeDispatch = sandbox.stub();
goToPage = sandbox.spy();
});
afterEach(() => {
sandbox.restore();
});
it('should redirect if the Personalisation Form has a null value', () => {
fakeState = {
app: {
inputs: {
field1: null,
field2: null,
field3: null,
},
},
};
redirectToIntroPage()(fakeDispatch, fakeGetState);
expect(goToPage.calledOnce).toBe(true);
});
it('shouldn\'t redirect if the Personalisation Form is complete', () => {
});
});
Я думаю о тестах, чтобы заглушить goToPage
и проверить, что он был вызван. Я должен позвонить redirectToIntroPage()(fakeDispatch, fakeGetState)
, чтобы сделать это, но как мне попасть внутрь redirectToIntroPage
, чтобы проверить, что goToPage
был вызван?
Я посмотрел здесь , что имеет концептуальный смысл, но как мне перевести это в Синон и Шут?
Я также посмотрел здесь , что является той же идеей.