我在实际服务中使用了一个函数,但我想知道如何在单元测试用例中注入该函数。下面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();
};
答案 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一样。
这种方法的好处是您可以单独测试您的功能/服务。
编写组件测试时,您始终可以模拟此新服务调用。同样,这可以帮助您单独测试组件。