207 похожих чатов

Всем привет! Подскажите пожалуйста по мокам для модулей при тестировании компонентов

с vue test utils

Есть компонент, который обращается к сессии через самописную функцию-хелпер для работы с локальными хранилищами данных.

import { initStorage } from '@/utils/storage'

const session = initStorage(sessionStorage);

export default {
...
data() {
return {
someData: session.parse('someData')
}
},
methods: {
setToSession(payload) {
session.stringify('someData', payload)
}
},
...
}

В тесте


import { initStorage } from '@/utils/storage';
import SomeComponent from './SomeComponent'

jest.mock('@/utils/storage', () => ({
initStorage: jest.fn().mockImplementation(() => ({
get: jest.fn().mockReturnValue('init')
}))
}));

describe('SomeComponent', () => {
it('test-1', () => {
initStorage.mockImplementation(() => ({
get: jest.fn().mockReturnValue('from test-1')
}));

// тут все равно с get приходит 'init', жду 'from test-1'
})
it('test-2', () => {
initStorage.mockImplementation(() => ({
get: jest.fn().mockReturnValue('from test-2')
}));

// тут тоже все равно с get приходит 'init', жду 'from test-2'
})
});


Как сделать так, чтобы каждй тест мог менять поведение функции get?

Есть подозрение, что нехорошо глобально в компоненте так объявлять session, но так как он нужен и в data и в methods, то именно этот подход выглядит удобным.

P.S. Вынужден мокать get сразу после импортов (со значением init), так как этот метод используется одной из зависимостей компонента

2 ответов

12 просмотров

Вынести get наружу не получится? В describe let get; Потом в beforeEach get = jest.fn, ну и потом где нужно - мокать нужный returnValue

rast- Автор вопроса
Max Kiner
Вынести get наружу не получится? В describe let ge...

Спасибо! Попробовал вынести get вот так import { initStorage } from '@/utils/storage'; import SomeComponent from './SomeComponent' let mockGet = jest.fn().mockReturnValue('init'); jest.mock('@/utils/storage', () => ({ initStorage: jest.fn().mockImplementation(() => ({ get: mockGet })) })); describe('SomeComponent', () => { beforeEach(() => { mockGet = jest.fn().mockReturnValue('init'); }); it('test-1', () => { mockGet = jest.fn().mockReturnValue('from test-1'); }); it('test-2', () => { mockGet = jest.fn().mockReturnValue('from test-2'); }); }); Но get: mockGet почему-то не срабатывает и если в тестируемом компоненте сделать console.log для сервиса-хранилища, то {get: undefined} 😢 То есть как будто get: mockGet на самом деле не передал mock в get свойство

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта