我试图编写一个测试角度服务,它有一个主题属性和一个方法来调用.next()该主题。该服务是:单元测试Angular 2服务主题
@Injectable()
export class SubjectService {
serviceSubjectProperty$: Subject<any> = new Subject();
callNextOnSubject(data: any) {
this.serviceSubjectProperty$.next(data);
}
}
而且该服务的测试文件:
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');
})
}));
});
测试,如果我subjectService.callNextOnSubject从“测试”的说法改为别的始终传递事件。我也尝试用async和fakeAsync包装所有东西,但结果是一样的。
什么是测试callNextOnSubject是否将数据发送到serviceSubjectProperty $ Subject的正确方法?
您应该在调用方法之前订阅*,该主题没有任何重播/缓冲区行为。 – jonrsharpe
@jonrsharpe工作,谢谢。 –
当您正在测试_service_时,您不应该使用角度测试基础结构。它所做的只是让你的测试代码更长,更容易出错。 –