【发布时间】:2017-12-20 01:24:08
【问题描述】:
我正在尝试为具有 Subject 属性和调用 .next() 的方法的 Angular 服务编写测试。
服务如下:
@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 的参数从 'test' 更改为其他任何值,测试总是通过事件。
我也试过用async和fakeAsync包装所有东西,但结果是一样的。
测试callNextOnSubject 是否向serviceSubjectProperty$ 主题发送数据的正确方法是什么?
【问题讨论】:
-
您应该在调用方法之前订阅,该主题没有任何重播/缓冲行为。
-
@jonrsharpe 成功了,谢谢。
-
当您对服务进行单元测试时,您不应该使用角度测试基础架构。它所做的只是让你的测试代码更长,更容易出错。
-
@crdevdeu 如果其中一个答案是正确的 - 请标记它;)
标签: angular testing jasmine rxjs subject