【问题标题】:Laravel8 tdd: session is missing expected key errorsLaravel8 tdd:会话缺少预期的关键错误
【发布时间】:2021-12-01 23:49:54
【问题描述】:

我只想测试一个简单的输入字段,但我收到了这个错误!

/** @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',
        ];
    }

希望你能帮帮我。

【问题讨论】:

  • 有时当您的代码出现错误时,您在运行composerartisantest 命令时会在控制台Session is missing 中收到此错误
  • 我该如何解决?
  • 尝试一些作曲家或工匠命令是否有效?
  • 我已经运行了这个,但它没有帮助----- php artisan config:cache & php artisan config:clear & php artisan view:clear & php artisan cache:clear & composer dump-自动加载
  • 注意:在测试函数中使用$this->withoutExceptionHandling(); 可能会为您提供有关实际错误的更多详细信息。

标签: php laravel laravel-8 laravel-testing


【解决方案1】:

如果你使用的是 api 路由,那么你应该使用

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

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

适用于 JSON 和会话错误。

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

【讨论】:

    【解决方案2】:

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

    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');
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2018-02-07
      • 2015-12-10
      • 2015-04-15
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多