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

问题描述 投票:-1回答:1

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']]调用,但从未被调用。

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

angular unit-testing local-storage karma-jasmine
1个回答
0
投票
  1. 类型'“ 1”'的参数不能分配给类型'期望'的参数:
  • 这是因为expect(localStorage.setItem('smtLogin', '1')).toBe('1');没有按照您的想法做。 localStorage.setItem()返回void,该值不可分配为Expected->字符串类型。无需期待任何事情,只需执行localStorage.setItem('smtLogin', '1')

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

  • 这似乎与导入有关,请确保正确导入了茉莉花类型。

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

  • 看起来您不是在引用实际的路由器,而是仅在存根类中引用。获取组件中使用的实际路由器的参考,并检查该路由器是否被调用。请阅读https://angular.io/guide/testing#routing-component以获取有关如何执行此操作的说明。

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

使用loginStatus === '1'代替loginStatus == '1'

© www.soinside.com 2019 - 2024. All rights reserved.