Тестирование Typescript - запустить код перед импортом экземпляра класса - PullRequest
0 голосов
/ 28 января 2019

Я пишу модульные тесты для экземпляра класса, который я экспортирую из моего 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 до того, как мой класс будет импортирован в

1 Ответ

0 голосов
/ 29 января 2019

Как вы упомянули, экземпляр класса создается перед заполнением макета хранилища, поэтому, возможно, вы можете попробовать следующееих по требованию.Код не проверен, хотя, надеюсь, он работает / помогает.

...