Reputation: 59
I'm trying to write a unit test and I'm getting this error.
TypeError: Cannot read property 'pipe' of undefined at Jasmine
const mockServiceObj = jasmine.createSpyObj < FormRegistrationService > (["registerForm", "pipe"]);
const getCurrentSystemPreference = jasmine.createSpyObj < CurrentSystemPreferencesService > ([
"getCurrentSystemPreference",
"pipe",
]);
function getServiceManagerLinks(): ServiceManagerSharedLinksComponent {
return new ServiceManagerSharedLinksComponent(null, mockServiceObj, getCurrentSystemPreference);
}
Upvotes: 2
Views: 2525
Reputation: 7103
Probably the correct (or at least close to correct) unit tests approach for your situation.
You have currentSystemPreferencesService
const and provide it to providers
. Now it's accessible in all tests cases. You also provide getPreferences
field as callable method. And of(true)
means you return on Observable
which is needed for pipe()
in real code since you immediately call .pipe(...)
after calling getPreferences(SystemPreference.APITestValue)
describe('ServiceManagerSharedLinksComponent ', () => {
let component: ServiceManagerSharedLinksComponent ;
let fixture: ComponentFixture<ServiceManagerSharedLinksComponent>;
const currentSystemPreferencesService: any = {
getPreferences: () => of(true),
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ServiceManagerSharedLinksComponent],
providers: [
{
provide: FormRegistrationService,
useValue: {}, // <-- You will need a different const for registerForm() method
},
{
provide: CurrentSystemPreferencesService,
useValue: currentSystemPreferencesService,
},
],
}).compileComponents();
fixture = TestBed.createComponent(ServiceManagerSharedLinksComponent);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should set display owner info when showOwnerInfo is TRUE', () => {
expect(component.isDisplayOwnerInfoSetOnSystemPreference).toEqual(true);
});
});
Upvotes: 1