Laravel 5.5中assertJsonValidationErrors()方法不存在问题求助
解决Laravel 5.5中assertJsonValidationErrors()方法不存在的问题
嘿,我来帮你排查这个问题!Laravel 5.5里确实自带assertJsonValidationErrors()这个测试方法,出现“方法不存在”的错误大概率是测试类的继承关系不对,或者自动加载缓存出了问题,下面一步步来解决:
检查测试类的继承关系
这是最常见的原因!你的测试类必须继承项目根目录下tests/TestCase.php这个Laravel封装的基类,而不是直接继承PHPUnit原生的TestCase。因为Laravel的tests\TestCase已经引入了包含assertJsonValidationErrors()的ValidatesRequeststrait,原生PHPUnit测试类并没有这个方法。正确的测试类开头应该是这样的:
<?php namespace Tests\Feature; // 必须引入这个Laravel的测试基类! use Tests\TestCase; class YourTestClass extends TestCase { // 你的测试方法 }刷新自动加载缓存
如果已经继承了正确的基类但还是报错,可能是Composer的自动加载缓存出了问题。运行下面的命令重新生成自动加载文件:composer dump-autoload同时也可以清理Laravel的配置和缓存,避免旧配置干扰:
php artisan cache:clear php artisan config:clear确认测试场景的正确性(额外提示)
虽然这不会导致“方法不存在”的错误,但顺便提一下:assertJsonValidationErrors()是用来验证JSON响应里的验证错误的,所以你的测试请求必须是JSON格式的,比如用$this->json('POST', '/your-url', $data)而不是普通的$this->post()(后者默认发送表单数据)。
举个完整的示例测试代码,你可以参考下:
<?php namespace Tests\Feature; use Tests\TestCase; class UserCreationTest extends TestCase { /** @test */ public function creating_user_fails_with_invalid_data() { // 发送JSON格式的POST请求,传入无效数据 $response = $this->json('POST', '/api/users', [ 'name' => '', // 名字为空,违反验证规则 'email' => 'not-an-email', // 无效邮箱格式 ]); // 验证响应中包含name和email字段的验证错误 $response->assertJsonValidationErrors(['name', 'email']); } }
按照上面的步骤排查,应该就能解决方法不存在的问题啦!
内容的提问来源于stack exchange,提问作者blank94
相关产品推荐
相关产品推荐

