I'm trying to write a test for an angular service which has a Subject property and a method to call .next()
on that subject.
The service is the following:
@Injectable()
export class SubjectService {
serviceSubjectProperty$: Subject<any> = new Subject();
callNextOnSubject(data: any) {
this.serviceSubjectProperty$.next(data);
}
}
And the test file for that service:
import { TestBed, inject } from '@angular/core/testing';
import { SubjectService } from './subject.service';
describe('SubjectService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
SubjectService
]
});
});
it('callNextOnSubject() should emit data to serviceSubjectProperty$ Subject',
inject([SubjectService], (subjectService) => {
subjectService.callNextOnSubject('test');
subjectServiceProperty$.subscribe((message) => {
expect(message).toBe('test');
})
}));
});
The test always passes event if I change the argument of subjectService.callNextOnSubject
from 'test'
to anything else.
I have also tried wrapping everything with async
and fakeAsync
, but the result is the same.
What would be the correct way to test if callNextOnSubject
is emitting data to the serviceSubjectProperty$
Subject?