Как написать тестовые примеры для значений localStorage в Jasmine - PullRequest
0 голосов
/ 28 апреля 2020

login.component.ts

  ngOnInit() {
    this.createForm();

    //  loginStatus = 1 - redirect to search
    //  else - redirect to login
    let loginStatus = localStorage.getItem('smtLogin');
    if (loginStatus == '1') {
      this.router.navigate(['/search']);
    } else {
      localStorage.setItem('smtLogin', '0');
    }
  }

login.component.spe c .ts

  it('it should navigate to search after user signs in', () => {
    expect(localStorage.setItem('smtLogin', '1')).toBe('1'); // set the localstorage smtLogin to '1'
    expect(localStorage.getItem('smtLogin')).toBe('1'); //get the loaclstotorage smtLogin value as'1'
    expect(routerStub.navigate).toHaveBeenCalledWith(['/search']);
  });

ошибки:

  1. Аргумент типа «1» не может быть назначен параметру типа «Ожидаемый».

  2. Переменная в области блока «ожидание», используемая до ее объявления.

  3. Ожидается, что шпионская навигация была вызвана с [['/ search']], но никогда не вызывалась.

Не могли бы вы помочь мне написать тестовый пример для этого оператор this.router.navigate (['/ search']); внутри блока if () в ngOnInit ()

1 Ответ

0 голосов
/ 28 апреля 2020
  1. Аргумент типа «1» не может быть назначен параметру типа «Ожидаемый»:
  • Это потому, что expect(localStorage.setItem('smtLogin', '1')).toBe('1'); не делать то, что вы думаете. localStorage.setItem() возвращает void, который нельзя назначить типу Expected -> string. Нет необходимости ожидать чего-либо, просто выполните localStorage.setItem('smtLogin', '1')

Блочная переменная «ожидание», используемая до ее объявления.

  • This похоже на проблему с импортом, убедитесь, что типы жасмина правильно импортированы.

Ожидаемая шпионская навигация была вызвана с [['/ search']], но никогда не вызывалась.

  • Похоже, вы ссылаетесь не на реальный маршрутизатор, а на класс-заглушку. Получите ссылку на фактический маршрутизатор, используемый в вашем компоненте, и проверьте, был ли он вызван. Пожалуйста, прочитайте https://angular.io/guide/testing#routing -компонент для объяснения того, как это сделать.

В sidenote всегда используйте === при сравнении значений:

Используйте loginStatus === '1' вместо loginStatus == '1'

...