如何在单元测试中将对象作为参数传递? (laravel)
How to pass an object as parameter in unit test? (laravel)
我在下面有一个数据对象,我尝试使用邮递员对其进行测试。我只是不知道如何在 laravel 的单元测试中实现这一点。我已经访问过这个 link 但它对我的情况没有帮助。
{
"user_id": 1,
"name": "juan",
"address": [
"state": "Auckland",
"country": "New Zealand",
],
"school": [
{
"school_name": "Kristin School",
"year": 2016
},
{
"school_name": "ACG Parnell College",
"year": 2018
},
],
// and more...
}
如何在单元测试中传递上面这样的对象?有什么办法可以实现吗?
$response = $this->post('/logbooks/user', ['Authorization': 'Bearer' + $token]);
如您在 Laravel docs for HTTP tests 中所见,您可以发送一个 php 数组,如下所示:
$payload = [
"user_id" => 1,
"name" => "juan",
"address" => [
"state" => "Auckland",
"country" => "New Zealand",
],
];
$response = $this->postJson(
'/logbooks/user', $payload, ['Authorization': 'Bearer' + $token]
);
它将您的 php $payload
数组编码为 JSON 并发送。
如果你有一个对象,你可以用 $myArray = (array) $myObject
.
来投射它
首先要知道此类测试不是“单元测试”类型。
请注意,代码将 运行 并且您应该警惕 运行 代码可能带来的更改(更新数据库中的数据、联系外部提供商)。
当然,这些都是可以嘲讽的,建议大家仔细阅读。
class FooTest extends TestCase {
public function testBar()
{
$response = $this->post('/api/v1/yourapi',
[
"user_id" => 1,
"name" => "juan",
"address" => [
"state" => "Auckland",
"country" => "New Zealand"
],
"school" => [
[
"school_name" => "Kristin School",
"year" => 2016
],
[
"school_name" => "ACG Parnell College",
"year" => 2018
]
]
]);
$response->assertStatus(200);
$response->assertJsonStructure([...]);
$response->assert....();
}
}
正如我在下面的评论中所写,您附加的 JSON 无效。
您将数组视为一个对象,添加了不必要的逗号。
建议使用IDE知道识别的数组
我在下面有一个数据对象,我尝试使用邮递员对其进行测试。我只是不知道如何在 laravel 的单元测试中实现这一点。我已经访问过这个 link 但它对我的情况没有帮助。
{
"user_id": 1,
"name": "juan",
"address": [
"state": "Auckland",
"country": "New Zealand",
],
"school": [
{
"school_name": "Kristin School",
"year": 2016
},
{
"school_name": "ACG Parnell College",
"year": 2018
},
],
// and more...
}
如何在单元测试中传递上面这样的对象?有什么办法可以实现吗?
$response = $this->post('/logbooks/user', ['Authorization': 'Bearer' + $token]);
如您在 Laravel docs for HTTP tests 中所见,您可以发送一个 php 数组,如下所示:
$payload = [
"user_id" => 1,
"name" => "juan",
"address" => [
"state" => "Auckland",
"country" => "New Zealand",
],
];
$response = $this->postJson(
'/logbooks/user', $payload, ['Authorization': 'Bearer' + $token]
);
它将您的 php $payload
数组编码为 JSON 并发送。
如果你有一个对象,你可以用 $myArray = (array) $myObject
.
首先要知道此类测试不是“单元测试”类型。 请注意,代码将 运行 并且您应该警惕 运行 代码可能带来的更改(更新数据库中的数据、联系外部提供商)。
当然,这些都是可以嘲讽的,建议大家仔细阅读。
class FooTest extends TestCase {
public function testBar()
{
$response = $this->post('/api/v1/yourapi',
[
"user_id" => 1,
"name" => "juan",
"address" => [
"state" => "Auckland",
"country" => "New Zealand"
],
"school" => [
[
"school_name" => "Kristin School",
"year" => 2016
],
[
"school_name" => "ACG Parnell College",
"year" => 2018
]
]
]);
$response->assertStatus(200);
$response->assertJsonStructure([...]);
$response->assert....();
}
}
正如我在下面的评论中所写,您附加的 JSON 无效。 您将数组视为一个对象,添加了不必要的逗号。
建议使用IDE知道识别的数组