Я хочу переделать функцию в тесте. Но реализация всегда остается первой, которую я реализую. Я попытался макетировать функцию, а затем поместить ее в фиктивный объект. После каждого теста я пытаюсь очистить реализацию, потому что, очевидно, я использую другой макет в другом тесте. Это мой тест
describe("auth.actions", () => {
const loginUserMock = jest.fn();
afterEach(() => {
loginUserMock.mockReset();
});
jest.mock("@services/auth/AuthService", () => {
return function() {
return {
loginUserByEmailAndPassword: loginUserMock
};
};
});
it("logs in user correctly", () => {
loginUserMock.mockImplementation(
() => new Promise((resolve, reject) => resolve(true))
);
const expectedActions = [
{ type: authConstants.LOGIN_REQUEST, loginEmail: "test@test.de" },
{ type: authConstants.LOGIN_SUCCESS }
];
const store = mockStore(initialState);
return store
.dispatch(authActions.login("test@test.de", "password"))
.then(() => {
// return of async actions
expect(store.getActions()).toEqual(expectedActions);
});
});
it("returns error", () => {
loginUserMock.mockImplementation(
() => new Promise((resolve, reject) => resolve(false))
);
const expectedActions = [
{ type: authConstants.LOGIN_REQUEST, loginEmail: "test@test.de" },
{
type: authConstants.LOGIN_FAILURE,
error: new Error("Login fehlgeschlagen")
}
];
const store = mockStore(initialState);
return store
.dispatch(authActions.login("test@test.de", "password"))
.then(() => {
// return of async actions
expect(store.getActions()).toEqual(expectedActions);
});
});
});
Первый макет работает (потому что его первый). Другой макет все еще разрешается, поэтому тест не пройден.