gpt4 book ai didi

angular - 错误 : Expected no open requests, 找到 1

转载 作者:太空狗 更新时间:2023-10-29 17:30:04 25 4
gpt4 key购买 nike

当我尝试执行 HTTP 单元测试用例时出现此错误。

我正在使用 Angular 5。我该如何解决这个问题?

下面是我的普通 GET 代码。下面的代码只是带来了正常的 GET。

import { 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);
});
});
});

最佳答案

Expected no open requests, found 1

当您发出模拟请求但没有“完成/关闭”它时,就会发生这种情况。打开的请求在测试运行后可能会保持打开状态,最终导致内存泄漏,尤其是在多次运行测试的情况下。

订阅模拟请求就客户端而言调用它但就后端而言不会“完成”它。可以通过多种方式“完成”请求;

backend = TestBed.get(HttpTestingController)

  1. backend.expectOne(URL) - 这将测试 url,并“关闭”后端调用。这不会测试参数,如果您的查询中包含参数,则会失败。
  2. backend.expectNone(URL) - 如果您正在测试具有参数的 url,expectOne() 将不起作用。您必须使用 backend.match()。 Match 不会自动关闭后端 api 调用,因此您可以在它之后使用 expectNone() 将其关闭。
  3. .flush(RESPONSE) - flush 将强制发送对 http 调用的响应,然后关闭调用。注意:如果在 match() 上调用 flush,请注意 match 返回数组,即 backend.match(...)[0].flush({})

这些方法中的任何一个都会关闭 http 请求,并使 backend.verify() 正常运行。

引用资料

  • 您可以找到深入的示例和更多解释 here
  • expectOne()match() 返回 TestRequest 的一个实例
  • expectNone() 总是返回 void

关于angular - 错误 : Expected no open requests, 找到 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49430213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com