我想测试在管道内完成的 3 个请求。简化示例:
httpClient.get<Data[]>(testUrl)
.pipe(
mergeMap(() => range(0, 2)),
mergeMap(() => httpClient.get<Data[]>(testUrl)),
)
Run Code Online (Sandbox Code Playgroud)
我正在使用官方推荐: HttpTestingController。如果我一个接一个地收到请求,它就可以正常工作httpTestingController.match。然而,我真正的应用程序并不是这样编写的。它使用的是管道。
let testData: Data[] = [
{ name: 'bob' }, { name: 'carol' },
{ name: 'ted' }, { name: 'alice' }
];
// Make three requests in a row
httpClient.get<Data[]>(testUrl)
.subscribe(d => expect(d.length).toEqual(0, 'should have no data'));
httpClient.get<Data[]>(testUrl)
.subscribe(d => expect(d).toEqual([testData[0]], 'should be one element array'));
httpClient.get<Data[]>(testUrl)
.subscribe(d => expect(d).toEqual(testData, 'should be expected data'));
// get all pending requests that match …Run Code Online (Sandbox Code Playgroud) 我正式向 Stack Overflow 上的仁慈的撒玛利亚人喊一声叔叔。
我正在尝试使用模拟数据库对我的 GORM (Postgres) + Fiber API 进行单元测试。我有一个Card模型和一个CreateCardReqBodyPOST 请求正文的模型。为了设置测试,我创建一个随机CreateCardReqBody实例,将其编组为 JSON,然后将其传递到*httptest.Request. 处理程序使用 Fiber 的(*fiber.Ctx).BodyParser函数将请求主体“解组”为空Card结构。但是,当我运行应该通过的测试时,Fiber 抛出“无法处理的实体”错误。
以下是我的代码的相关部分;测试文件是本教程和Fiber 关于 (*App).Test 方法的文档的组合。(我意识到代码可以清理;我只是想获得生命的证明,然后专注于修改:)
我做了一些事情来调试这个:我使用与测试相同的值发出了 Postman POST 请求,并且它有效。在测试本身中,我对CreateCardReqBody结构进行编组然后解组,这样就可以了。我已经三次检查了 JSON 字段的拼写是否匹配、结构字段是否已导出等。我还运行了 VSCode 调试器,bodyFiber.Ctx 中的字段对我来说看起来也是正确的。
我开始怀疑这是否与 Fiber 从测试请求和真实请求中解析正文的方式有关。我将非常感谢任何人能分享对此的见解!
模型定义
type Card struct {
gorm.Model
// Implicit Gorm foreign key to fleet ID
FleetID uint `gorm:"index" json:"fleet_id" validate:"required,min=1"`
// Card provider's account number
ProviderAccountNumber string `json:"provider_account_number"` …Run Code Online (Sandbox Code Playgroud)