Jest.js 如何测试订阅数据并将其传递给其他两个函数的函数

wmomyfyw  于 2022-12-08  发布在  Jest
关注(0)|答案(1)|浏览(148)

我正在学习jest,需要帮助来测试Angular 服务中的一个特定函数。这个函数没有参数,并且订阅了一个get函数,订阅的数据被传递给另外两个函数。我有模拟数据,但是在编写测试时遇到了麻烦。

public export(): void {
    this.getDataValues().subscribe((data) => {
      this.exportDelays(data.delay);
      this.exportCancels(data.cancels);
    });
}

如有任何帮助,我们将不胜感激,谢谢。

nhhxz33t

nhhxz33t1#

你可以通过模拟getDataValues()函数的返回值来测试它。

describe('Service', () => {
  let service: Service;
  
TestBed.configureTestingModule({
  // imports, providers and declarations come here::
}).compileComponents();

beforeEach(() => {
  service = TestBed.inject(Service);
});

it('export', () => {
  const mockData = {
    // create an object with the same type as your expected returnData
  }
  jest.spyOn(service, 'getDataValues').mockReturnValue(of(mockData));
  jest.spyOn(service, 'exportDelays').mockImplementation();
  jest.spyOn(service, 'exportCancels').mockImplementation();

  service.export();
 
  expect(service.getDataValues).toHaveBeenCalled();
  expect(service.exportDelays).toHaveBeenCalled();
  expect(service.exportCancels).toHaveBeenCalled();
}

请注意,您需要返回一个可观察对象,它通过将of(mockData)作为returnValue传递来发出您的mockData。只有这样,该函数才能订阅并触发其他服务方法。

相关问题