Как Карма обрабатывает глобальные переменные - PullRequest
0 голосов
/ 18 июня 2019

Я хотел попробовать протестировать мое машинописное приложение с помощью кармы. Мое приложение содержит несколько классов, которые я использую в качестве синглетонов, например:

export class MyService{
    private country: string = "USA";

    private constructor(){}
    private INSTANCE: MyService;
    public getInstance(){
        if(!this.INSTANCE){
           this.INSTANCE = new MyService();
           return this.INSTANCE;
        } 
        return this.INSTANCE;
    }
    public updateCountry(country: string){
        this.country = country;
    }
}

, который в основном компилируется в глобальную переменную MyService с членом INSTANCE что я могу позвонить MyService.INSTANCE из консоли браузера.

Я использую этот сервис из двух классов, которые я хочу протестировать:

export class A{
  public set(){

    MyService.getInstance().updateCountry('France');
  }
}

и

export class B{
  public get(){
    return MyService.getInstance().getCountry();
  }
}

Мои тесты:

A:
describe('A Test Suite', () => {
   it('', () => {
       expect(MyService.getInstance().getCountry()).toEqual('USA');
       const a: A = new A();
       a.set();
       expect(MyService.getInstance().getCountry()).toEqual('France'); 
   });
});

B:
describe('B Test Suite', () => {
   it('get function should return USA', () => {
       const b: B = new B();
       expect(b.get()).toEqual('USA');
   });
});

Теперь, если набор тестов B будет запущен первым, оба теста пройдут, но если A будет выполняться первым, A пройдут, но B не пройдут, так как теперь значение страны «Франция» Есть ли какие-то кармы, которые мне не хватает, которые должны очистить все данные браузера между тестами, или какой-то другой способ убедиться, что мои тесты не связаны таким образом. примечания: MyService является действительным синглтоном в моем приложении. Поскольку я хочу, чтобы это был интеграционный тест, я не хочу его издеваться.

Мне трудно поверить, что у Кармы нет решения для такого рода проблем, так как в веб-приложении часто встречаются глобальные переменные или синглтоны.

Любые комментарии или предложения будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...