我应该使用哪个断言方法来通过api存储测试



我正试图传递我的testStoreUser((方法,但在使用哪个断言语句时遇到问题。我使用的密码是API路由,而不是带有哈希的服务器路由。这是我的testStoreUser((:

public function testStoreUser()
{
//Arrange
$data = [
'data' => [
'name' => 'Testing Name',
'email' => 'myTesting@email.com',
'password' => 'Harley81',
],
];
//Act
$response = $this->postJson('/api/users/', $data);
//Assert
$response
->assertStatus(201)
->assertJsonStructure([
'data' => [
'name',
'email',
'password',
]
]);
$this->assertDatabaseHas('users', $data['data']);
}

这里是我的api/用户控制器,特别是存储功能:

/**
* Store a newly created user in storage.
*
* @param Request $request
* @return UserResource
*/
public function store(Request $request): UserResource
{
$validated = $request->validate([
'data' => 'required|array',
'data.name'=> 'required|string',
'data.email'=> 'required|string',
'data.password' => ['required', Password::min(8)->mixedCase()],
]);
$user = new User();
$user->fill($validated['data'])->saveOrFail();
return new UserResource($user);
}

这是我目前得到的错误:

Failed asserting that an array has the key 'password'.
/var/www/html/vendor/laravel/framework/src/Illuminate/Testing/AssertableJsonString.php:256
/var/www/html/vendor/laravel/framework/src/Illuminate/Testing/AssertableJsonString.php:241
/var/www/html/vendor/laravel/framework/src/Illuminate/Testing/AssertableJsonString.php:254
/var/www/html/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php:795
/var/www/html/tests/Feature/UserApiTest.php:49

我只是在测试中需要这个。

$response
->assertStatus(201)
->assertJson([
'data' => [
'name' => $data['data']['name'],
'email' => $data['data']['email'],
]
]);

最新更新