Laravel8 tdd:会话缺少预期的关键错误

Laravel8 tdd: session is missing expected key errors

我只想测试一个简单的输入字段,但出现此错误!

/** @test */
public function email_must_be_a_valid_email()
 {
   $response = $this->post('/api/contacts', array_merge($this->data(), ['email' => 'NOT AN EMAIL']));
   $response->assertSessionHasErrors('email');
 }


private function data()
{
  return [
          'name' => 'Test Name',
          'email' => 'test@hotmail.com',
          'birthday' => '05/14/1988',
          'company' => 'ABC String'
        ];
}

这些是控制器和请求规则。 我希望你能帮助我。

class StoreController extends Controller
{
    public function store(ContactsRequest $request)
    {
        $data = $request->validated();
        Contact::create($data);
    }
}

public function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email',
            'birthday' => 'required',
            'company' => 'required',
        ];
    }

希望你能帮助我。

如果您使用的是 api 路线,那么您应该使用

$response->assertJsonValidationErrors(['email']);

$response->assertInvalid(['email']);

它适用于 JSON 和会话错误。

https://laravel.com/docs/8.x/http-tests#assert-invalid

感谢您的提示。我已经解决了这个问题!但是这种错误信息对于快速找到解决方案一点帮助都没有。 解决方案是我需要登录才能创建联系人,然后验证表单数据。但是错误消息说的完全不同!

protected $user;

protected function setUp(): void
{
   parent::setUp();
   $this->user = User::factory()->create();
   $this->user->createToken(Str::random(30))->plainTextToken;
}


/** @test */
public function email_must_be_a_valid_email()
{
   $this->actingAs($this->user);
   $response = $this->post('/api/contacts', array_merge($this->data(), ['email' => 'NOT AN EMAIL']));
   $response->assertSessionHasErrors('email');
}