无法进行spyOn测试以正常工作-Angular

时间:2018-09-03 14:45:27

标签: javascript angular typescript testing karma-runner

由于某种原因,我的测试无法正常工作,并且不断抛出错误:

  

isCurrentStatus上预期的间谍结果等于true。

所调用的函数只是评估传入的变量是否等于当前保留的status属性,并返回true或false。没什么大不了的...

测试

it('should return true if current status = status passed in', () => {
    const statusSpy = spyOn(component, 'isCurrentStatus');
    component.event = failedEvent;
    component.isCurrentStatus('failed');
    expect(statusSpy).toEqual(true);
  })

组件

event: MyEvent;

isCurrentStatus(status: string): boolean {
    return this.event.status === status;
  }

更新

我刚刚将spyOn移到了beforeEach()部分,现在返回:

  

期望undefined等于true

3 个答案:

答案 0 :(得分:1)

您可以在函数上创建一个spyOn并检查其返回值是否不同:

spyOn(component, 'isCurrentStatus').and.callThrough();
component.event = failedEvent;
const statusResult = component.isCurrentStatus('failed');
expect(statusResult).toBeTruthy();

答案 1 :(得分:1)

Expected spy on isCurrentStatus to equal true.这是因为spyOn实际上创建了spy。然后您尝试使用expect(Spy).toEqual(Boolean);之类的代码,这样会得到这样的错误。

expected undefined to equal true-您得到的原因是beforeEach()的范围不在测试功能(it())范围内

您要测试返回的值-无需在此处进行监视。只需调用函数并检查其结果即可。

当您需要测试而不返回值但需要其他值时,就需要间谍。例如,它是注入依赖项的函数,但您需要确信它已被调用。因此,您创建了一个间谍。或者:您需要检查函数被调用了多少次,传递了哪些参数,等等。或者何时需要模拟其行为。

答案 2 :(得分:0)

尝试此操作以测试返回的值

expect(component.isCurrentStatus('failed')).toEqual(true);

您可以检查该方法是否被调用

const statusSpy = spyOn(component, 'isCurrentStatus').and.callThrough();
...
expect(statusSpy).toHaveBeenCalledTimes(1);

您可以检查参数

expect(statusSpy).toHaveBeenCalledWith('failed')