首页 > 解决方案 > 如何 SpyOn 原生 JavaScript 函数?比如.find()?

问题描述

我试图模拟this.editedComponentDetailsData.find以下内容:

editButtonClicked(event) {
    let rowData = this.editedComponentDetailsData.find((row) => {
      return row.operationalSequenceNumber == this.rowKey;
    })
  }

这不起作用:

 it('should do something', () => {
    let result=spyOn(subject.editedComponentDetailsData.prototype,'find').and.returnValue({prop1:''});
  });

标签: javascriptangularunit-testingjasminekarma-jasmine

解决方案


只需分配editedComponentDetailsData一个像空数组一样可迭代的属性,然后您就可以监视 find,但是您只需在没有原型的情况下访问它,就像在组件内部一样。

beforeEach(() => {
    TestBed.resetTestEnvironment();
    TestBed.initTestEnvironment(BrowserDynamicTestingModule,
      platformBrowserDynamicTesting())

    TestBed.configureTestingModule({
      declarations: [AppComponent],
      providers: [
        AppComponent
      ],

      schemas: [NO_ERRORS_SCHEMA]
    });
    fixture = TestBed.createComponent(AppComponent);
    subject = fixture.componentInstance;
    subject.editedComponentDetailsData=[]; //mock with empty array
  });
  it('should do something', () => {
    let result=spyOn(subject.editedComponentDetailsData,'find').and.returnValue({prop1:''}); //the spy
  });

推荐阅读