使用Function not provider的Angular 2单元测试用例

时间:2017-11-14 07:17:52

标签: angular unit-testing

我在实际服务中使用了一个函数,但我想知道如何在单元测试用例中注入该函数。下面isSameDay是一个函数而不是提供者。我如何将它注入测试用例,因为这个函数在实际服务中工作正常。

import { LoggerService, isSameDay } from '../../../shared';

describe('NavBaseComponent', () => {
  let component: NavBaseComponent;
  let fixture: ComponentFixture<NavBaseComponent>;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [NavBaseComponent],
      providers: [
        LoggerService
      ]
    })
      .compileComponents();
  });

  beforeEach(() => {
    fixture = TestBed.createComponent(NavBaseComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should be created', () => {
    expect(component).toBeTruthy();
  });
});

isSameDay函数的代码

export function isSameDay(d1: Date, d2: Date): boolean {
    return !!d1 && !!d2 &&
        d1.getDate() === d2.getDate() && 
        d1.getMonth() === d2.getMonth() &&
        d1.getFullYear() === d2.getFullYear();
};

3 个答案:

答案 0 :(得分:4)

您无需将其注入任何地方,您可以按原样进行测试。

import { LoggerService, isSameDay } from '../../../shared';

describe..

  it('should test isSameDay', ()=>{
      expect(isSameDay(new Date(), new Date())).toEqual(true);
  })

..

以下是一个有关的例子:http://plnkr.co/edit/TyTyaJvDD28AqPH2yDKa?p=preview

答案 1 :(得分:0)

如果我是你,我会使用类似的存根服务 providers: [ {provide: UserService, useValue: userServiceStub } ]

你可以这样得到它 userService = fixture.debugElement.injector.get(UserService);userService = TestBed.get(UserService);

例如:

TestBed.configureTestingModule({
     declarations: [ WelcomeComponent ],
     providers:    [ {provide: UserService, useValue: userServiceStub } ]
  });

  fixture = TestBed.createComponent(WelcomeComponent);
  comp    = fixture.componentInstance;

  // UserService from the root injector
  userService = TestBed.get(UserService);
  ...

答案 2 :(得分:0)

如果您需要测试isSameDay函数,您可以将其转换为服务并将其视为与任何其他服务相同。就像你的情况下的LoggerService一样。

这种方法的好处是您可以单独测试您的功能/服务。

编写组件测试时,您始终可以模拟此新服务调用。同样,这可以帮助您单独测试组件。