gpt4 book ai didi

Laravel:如何伪造对第 3 方的 http 请求和模拟 json 响应

转载 作者:行者123 更新时间:2023-12-05 09:08:16 27 4
gpt4 key购买 nike

我正在努力弄清楚什么可能是非常基本的东西,离开这里我会被 mock ,但我希望它也能帮助其他人。

我正在尝试在功能测试中模拟/测试 Http 请求。我仍在学习好的/更好/最好的测试技术,所以也许有更好的方法。

// MyFeatureTest.php

$user = factory(User::class)->create(['email' => 'example@email.com']);

// Prevent actual request(s) from being made.
Http::fake();

$this->actingAs($user, 'api')
->getJson('api/v1/my/endpoint/123456')
->assertStatus(200);

在我的 Controller 中,我的请求如下所示:

public function myFunction() {
try {
$http = Http::withHeaders([
'Accept' => 'application/json',
'Access_Token' => 'my-token',
'Content-Type' => 'application/json',
])
->get('https://www.example.com/third-party-url, [
'foo' => 'bar,
]);


return new MyResource($http->json());
} catch (RequestException $exception) {
Log::error("Exception error: " . print_r($exception, true));
}
}

我想模拟我收到 200 响应,并且理想情况下从资源中模拟预期的 json。当端点在我的应用程序本地时(不调用第 3 方),我已经成功地进行了此测试。这是我过去所做的:

$http->assertStatus(200)
->assertJsonStructure([
'type', 'id', 'attributes' => [
'email', 'uuid', 'created_at', 'updated_at',
],
])
->assertJson(['type' => 'example',...]);

在文档中我可以看到:

Http::fake([
'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),
]);

我如何模拟/伪造对第 3 方 url 的请求并断言良好的响应?感谢您的任何建议!

最佳答案

根据 docs(和您的问题),您可以将数组传递给 Http::fake() 以指定您希望对哪些请求做出什么样的响应,即 key 是请求 url,值是模拟响应。

你的测试应该是这样的:

$user = factory(User::class)->create(['email' => 'example@email.com']);

Http::fake([
'www.example.com/third-party-url' => Http::response([
'type' => 'example',
'id' => 'some id',
'attributes' => [
'email' => 'some email',
'uuid' => 'some uuid',
'created_at' => 'some created_at',
'updated_at' => 'some updated_at',
],
], 200),
]);

$this->actingAs($user, 'api')
->getJson('api/v1/my/endpoint/123456')
->assertStatus(200)
->assertJsonStructure([
'type',
'id',
'attributes' => [
'email',
'uuid',
'created_at',
'updated_at',
],
])
->assertJson(['type' => 'example', ...]);;

关于Laravel:如何伪造对第 3 方的 http 请求和模拟 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63633897/

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