Тестирование: класс spyOn Helper в угловых - PullRequest
0 голосов
/ 05 ноября 2018

Возможно ли spyOn вспомогательный класс? В приведенном ниже коде StatefulPatternService.init() вызывает WebSocketHelper.

Я бы хотел посмотреть на WebSocketHelper и высмеять subscribeFn

 export class WebSocketHelper{
  
  private url: string;
  
  constructor(url){
    this.url = url;
    init();
  }
  
  init(){
    // init websocket & other login
  }
}


@Injectable({
  providedIn: 'root'
})
export class StatefulPatternService {
  constructor(){}
  
  private callback(_data){ }
  
  init(){
  
    let wsHelper = new WebSocketHelper('/subscribe/topic'); // <-- How to spyOn???
    wsHelper.subscribeFn = this.callback;
    // ...    
  }
}

Если spyOn будет невозможен, то как его можно переписать, чтобы этот тест можно было покрыть?

1 Ответ

0 голосов
/ 06 ноября 2018

Ваша задача будет овладеть 'wsHelper', чтобы шпионить за ним. Одна мысль: можете ли вы сделать рефакторинг, чтобы вместо него сделать переменную области видимости wsHelper? Тогда вы могли бы подсмотреть, когда вы получите сервис в наборе тестов, например, что-то вроде:

service = TestBed.get(StatefulPatternService);
let spy = spyOn(service.wsHelper, 'subscribeFn');

Обновление

Из комментариев к моему ответу похоже, что вы действительно пытаетесь сделать, это убедиться, что конструктор был вызван с правильным URL-адресом. Поскольку вы сохраняете это в переменной класса, вам не нужно шпионить за конструктором, а просто проверять значение сохраненной переменной. Как я упоминал в комментариях, для этого вам понадобятся две вещи: сделать wsHelper переменной уровня класса и добавить метод в класс WebSocketHelper, который возвращает значение закрытой переменной 'url', чтобы вы могли проверить это. Я настроил стек-блиц, чтобы продемонстрировать, о чем я говорю здесь: STACKBLITZ Вот фрагмент из этого стека-блиц:

describe('MyService', () => {
    let myService: StatefulPatternService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [/* any imports needed */],
            providers: [ StatefulPatternService ]
        });
        myService = TestBed.get(StatefulPatternService);
    });

    it('should be createable', () => {
        expect(myService).toBeTruthy();
    });
    it('should construct wsHelper properly', () => {
        myService.init();
        expect(myService.wsHelper.get_url()).toEqual('/subscribe/topic');
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...