当我试图执行http单元测试用例时,我得到了这个错误我用的是角5。我怎么解决这个问题下面是我的正常获取代码。下面的代码只会带来正常的getimport { TestBed } from '@angular/core/testing';import { HttpClientTestingModule, HttpTestingController, TestRequest } from'@angular/common/http/testing';import { DangerService } from './danger.service';import { DangerFlag } from '../danger.model';describe('DataService Tests', () => { let dataService: DangerService; let httpTestingController: HttpTestingController; let testDangerFlags: DangerFlag[] = [ "sample data" ] beforeEach(() => { TestBed.configureTestingModule({ imports: [ HttpClientTestingModule ], providers: [ DangerService ] }); dataService = TestBed.get(DangerService); httpTestingController = TestBed.get(HttpTestingController);});afterEach(() => { httpTestingController.verify();});fit('should get all danger flags', () => { dataService.getDangerFlagDetails() .subscribe((data: DangerFlag[]) => { expect(data.length).toBe(3); }); });}); 最佳答案 预期没有打开的请求,找到1当你提出一个模拟请求,但不要“完成/关闭”它时,就会发生这种情况。打开的请求可能在测试运行后保持打开,最终内存泄漏,特别是如果测试多次运行的话。订阅模拟请求会在客户端调用它,但在后端不会“完成”。完成一个请求可以通过多种方式完成;backend = TestBed.get(HttpTestingController)backend.expectOne(URL)-这将同时测试URL,并“关闭”后端调用。这不会对PARAMs进行测试,如果您的查询中有参数,将失败。>如果您正在测试具有子目录的URL,则 >无法工作。你必须使用backend.expectNone(URL)。match不会自动关闭后端api调用,因此您可以在调用后expectOne()关闭它。backend.match()-flush将强制发送http调用的响应,然后关闭该调用。注意:如果在expectNone()上调用flush,请注意返回数组的match,即.flush(RESPONSE)任何这些方法都将关闭http请求,并使match()行为正常。工具书类你可以找到深入的例子,以及更多的解释herebackend.match(...)[0].flush({})、backend.verify()和expectOne()都返回TestRequest的实例
08-08 03:51
查看更多