测试组件方法调用另一个方法

Lev*_*Lev 13 jasmine karma-runner angular

鉴于这个简单的组件:

import { Component} from '@angular/core';

@Component({
  selector: 'app-component'
})
export class AppComponent {
  foo() {
    this.bar();
  }

  bar() {
    console.log('hello');
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么以下测试不会验证bar我打电话时调用的内容foo

describe('AppComponent', () => {
  let component: AppComponent;

    beforeEach(() => {
    component = new AppComponent();
  }

  it('should foobar', () => {
    component.foo();
    spyOn(component, 'bar');
    expect(component.bar).toHaveBeenCalled();
  })

}
Run Code Online (Sandbox Code Playgroud)

我得到了失败的测试:

Expected spy bar to have been called.
Run Code Online (Sandbox Code Playgroud)

Ted*_*rne 24

您需要在调用方法之前设置间谍.Jasmine使用wrap函数来确定它们何时被调用以及它们被调用的内容.在调用spied on方法之前必须先包装该方法以捕获信息.尝试更改您的测试以匹配以下内容:

it('should foobar', () => {
    spyOn(component, 'bar');
    component.foo();
    expect(component.bar).toHaveBeenCalled();
})
Run Code Online (Sandbox Code Playgroud)


Tin*_*ara 5

it("should foobar", () => {
    const spy = spyOn(component, "bar");
    component.foo();
    expect(spy).toHaveBeenCalled();
  });
Run Code Online (Sandbox Code Playgroud)