Я хотел попробовать протестировать мое машинописное приложение с помощью кармы.
Мое приложение содержит несколько классов, которые я использую в качестве синглетонов, например:
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 является действительным синглтоном в моем приложении.
Поскольку я хочу, чтобы это был интеграционный тест, я не хочу его издеваться.
Мне трудно поверить, что у Кармы нет решения для такого рода проблем, так как в веб-приложении часто встречаются глобальные переменные или синглтоны.
Любые комментарии или предложения будут оценены.