繁体   English   中英

如何为 Jasmine 中的 localStorage 值编写单元测试用例

[英]How to write unit test cases for localStorage values in Jasmine

登录组件.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"' 类型的参数不能分配给 'Expected' 类型的参数。

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

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

你能帮我为这个语句写一个测试用例this.router.navigate(['/search']); 在 ngOnInit() 的 if() 块内

  1. '"1"' 类型的参数不能分配给 'Expected' 类型的参数:
  • 这是因为expect(localStorage.setItem('smtLogin', '1')).toBe('1'); 没有按照你的想法去做。 localStorage.setItem()返回void ,它不能分配给类型Expected -> string。 无需期待任何事情,只需执行localStorage.setItem('smtLogin', '1')

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

  • 这看起来像是导入问题,请确保正确导入 jasmine 类型。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM