我在 karma/jasmine 加载器运行时创建了一个 StackBlitz,以便您可以看到测试通过/失败。
应用程序正常工作。
我的测试应该没问题并且会通过,但是我在使用模拟服务而不是正确的 createspyobject
服务时遇到了一个奇怪的错误。
component.ts
getReportFunc(): void {
this.reportService.getReport(this.urn).subscribe(selectedReport => {
this.model = selectedReport;
});
}
简单调用服务以获取“getReport”。我将添加一个测试来检查报告是否已被调用。但是不能因为这个问题。
规范
describe("SearchComponent", () => {
let component: SearchComponent;
let fixture: ComponentFixture<SearchComponent>;
let mockReportService;
beforeEach(async(() => {
mockReportService = jasmine.createSpyObj(['getReport']);
TestBed.configureTestingModule({
declarations: [SearchComponent],
providers: [
//ReportService,
{ provide: ReportService, useValue: mockReportService },
...
问题在于 { provide: ReportService, useValue: mockReportService }
仅使用 ReportService
可以正常运行,但这意味着我无法运行其中一项测试。我想创建一个间谍对象 mockReportService = jasmine.createSpyObj(['getReport']);
。
您将在 StackBlitz 中看到的错误是 TypeError: Cannot read property 'subscribe' of undefined
。
如果有人可以帮助我使用模拟服务运行它,以便我可以测试 getReport 订阅功能,我将不胜感激。
答案 0 :(得分:1)
问题来自于滥用 .
你有两个选择:
Set pasteId = ColumnA.xlUp
:jasmine.createSpyObj
当然,间谍很整洁,但只有当您想在不同的单元测试期间更改返回值时,它们才有用。如果您只需要始终返回一个值,无论哪个,您都可以选择这样的硬编码对象:
jasmine.createSpyObj