Я пишу модульные тесты для экземпляра класса, который я экспортирую из моего TS следующим образом:
index.ts
export { myClass as MyClass } from './my-class';
my-class.ts
class MyClass {
constructor() {
const session = window.localstorage.getItem('some_session');
this.restoreSession(session);
}
restoreSession(session) {
this.activeSession = session;
}
getUserName() {
return this.activeSession.user.name;
}
}
export const myClass = new MyClass();
В своем тесте я пытаюсь выяснить, могу ли я указать значение по своему выбору для элемента localalstorage до импорта MyClass в тест.
Я попробовал следующее ниже, думая, что использование before
может помочь мне:
my-class.spec.ts
import { MyClass } from '../src/index.ts';
import { expect } from 'chai';
import { describe, before } from 'mocha';
const persistedSession = { user: { name: 'bob' } };
before(() => {
window.localStorage.setItem('some_session', JSON.stringify(persistedSession));
});
describe('After loading a persisted session, and retrieving the users name', () => {
it('should return the value of the users name', () => {
expect(MyClass.getUserName()).to.equal('bob');
});
});
Это не проходиттак как getUserName () возвращает пустую строку в тот момент, когда выполняется тест, и я подозреваю, что это происходит потому, что экземпляр класса импортируется \ создается перед моими тестовыми спецификациями, учитывая, что я все равно экспортирую экземпляр класса.
Я могутолько подумайте о рефакторинге моего TS, чтобы экспортировать класс, но не экземпляр, и тогда я просто обновлю его по мере необходимости.
Но я хотел знать, есть ли еще способ, которым я мог бы установить свои элементы localalstorage до того, как мой класс будет импортирован в