0

我有一门我正在尝试测试的课程。该类具有这样的注入服务:

 constructor(private actions$: Actions, @Inject('NotificationHandlerService') private notificationService: INotificationHandlerService) {}

在 spec.ts 中,我只是使用一个值来提供它,因为我只想测试显示函数是否被调用:

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        provideMockActions(() => actions$),
        RequirementNotificationsEffects,
        {
          provide: 'NotificationHandlerService',
          useValue: {
            display: () => {}
          }
        },
        provideMockStore({ initialState: requirementInitialState})
      ],
    });

    reqNotificationEffects = TestBed.inject(RequirementNotificationsEffects);
  });

然后我正在测试是否调用了显示函数但是我在运行测试时收到错误,说明Cannot spyOn on a primitive value; string given 测试:

    it('Call notification service to display message to user.', () => {
      const testOwner = new OwnerGroupReference({name: 'Test Owner'}) ;
      const action = reqActions.removeOwnersWithSubmission({ owners: [{testOwner}]});
      const notificationDisplaySpy = jest.spyOn('NotificationHandlerService', 'display');

      actions$ = hot("-a", { a: action });

      expect(reqNotificationEffects.removeOwners$).toSatisfyOnFlush(() => {
        expect(notificationDisplaySpy).toHaveBeenCalled();
      });
    });

有人知道我应该做什么吗?

4

2 回答 2

1

它应该是

 const notificationDisplaySpy = jest.spyOn(TestBed.get('NotificationHandlerService'), 'display');

在您的情况下,您正在尝试更改字符串的显示处理程序

于 2021-02-12T13:33:17.933 回答
1

在 const 变量中提取 useValue

const mockService = {
  display: jest.fn();
}
beforeEach(() => {
  TestBed.configureTestingModule({
    providers: [
      provideMockActions(() => actions$),
      RequirementNotificationsEffects,
      {
        provide: 'NotificationHandlerService',
        useValue: mockService
      },
      provideMockStore({ initialState: requirementInitialState})
    ],
  });

  reqNotificationEffects = TestBed.inject(RequirementNotificationsEffects);
});
it('Call notification service to display message to user.', () => {
  const testOwner = new OwnerGroupReference({name: 'Test Owner'}) ;
  const action = reqActions.removeOwnersWithSubmission({ owners: [{testOwner}]});

  actions$ = hot("-a", { a: action });

  expect(reqNotificationEffects.removeOwners$).toSatisfyOnFlush(() => {
    expect(mockService.display).toHaveBeenCalled();
  });
});

你也可以用 spyOn 来实现它

于 2021-02-12T13:34:57.573 回答