【问题标题】:How to write unit test cases for localStorage values in Jasmine如何在 Jasmine 中为 localStorage 值编写单元测试用例
【发布时间】:2020-04-28 18:03:41
【问题描述】:

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.spec.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. 在声明之前使用块范围变量“expect”。

  3. 预期的间谍导航已使用 [ [ '/search' ] ] 调用,但从未调用过。

能否请您帮我在 ngOnInit() 的 if() 块中为该语句 this.router.navigate(['/search']); 编写一个测试用例

【问题讨论】:

    标签: angular unit-testing local-storage karma-jasmine


    【解决方案1】:
    1. “1”类型的参数不能分配给“预期”类型的参数:
    • 这是因为expect(localStorage.setItem('smtLogin', '1')).toBe('1'); 没有按照您的想法行事。 localStorage.setItem() 返回 void,它不能分配给类型 Expected -> 字符串。无需期待任何事情,只需做localStorage.setItem('smtLogin', '1')

    在声明之前使用块范围变量“expect”。

    • 这似乎是导入的问题,请确保正确导入 jasmine 类型。

    预期的间谍导航已使用 [ [ '/search' ] ] 调用,但 它从未被调用过。

    • 看起来您没有引用实际的路由器,而只是引用了一个存根类。获取对组件中使用的实际路由器的引用,并检查是否调用了该路由器。请阅读 https://angular.io/guide/testing#routing-component 了解如何执行此操作。

    在旁注中,比较值时始终使用===

    使用loginStatus === '1' 而不是loginStatus == '1'

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 2023-03-06
      • 2017-05-29
      • 2023-03-24
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多