php - 在 Laravel 5.1 上断言验证错误

标签 php laravel phpunit

您好,我正在尝试为不依赖于 View 的 Laravel Controller 创建一个测试。我的 Controller 类中有以下方法:

public function store(Request $request)
{
    $this->validate($request,[
            'name'=>'required',
            'login'=>'required',
            'password'=>'required'
        ]);
    //TODO: Store to database
    return redirect('usuario/nuevo');
}

然后我找到了下面的代码来测试请求是否有错误:

public function testStore()
{
    $response=$this->call('GET','usuario.store');
    $this->assertSessionHasErrors();
}

因为我发送的请求没有填写必填字段,所以这个测试应该通过,但是 PhpUnit 返回以下消息:

Session missing key: errors
Failed asserting that false is true.

我能让它工作的唯一方法是尝试通过如下测试“查看”响应页面上的错误消息:

public function testStore()
{
    $this->visit('/usuario/nuevo')
        ->press('Crear')
        ->see('Whoops');
}

这对我不起作用有两个原因:1)测试取决于“按下”按钮并发送请求的 View (我希望在不同的测试中测试它并将这个严格保留给 Controller ) 和 2) 测试取决于要出现的 'Whoops' 字符串,这显然是不好的做法。

我找到了几个声称第一个测试代码应该有效的答案,但它根本不起作用。

最佳答案

在 session 开始时尝试并发送空参数

       $this->startSession();
       $this->call('GET','usuario.store', array(
        'name' => '',
        'login' => '',
        'password' => ''
    ));
    $errors = session('errors');
    $this->assertSessionHasErrors();
    $this->assertEquals($errors->get('name')[0],""your custom error message);// only for checking exact message

关于php - 在 Laravel 5.1 上断言验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39602465/

相关文章:

php - PDO不会选择数据库

php - 拉维尔 5 : Eloquent - order by relation when returning single record

javascript - Laravel - PHP array_push 为 Ajax 生成编号索引

PHP exec ('program.exe' ) 挂起网页

php - Laravel上的Elasticsearch聚合函数错误

php - Laravel orWhere()/MySQL 或查询需要很长时间

PhpUnit 模拟 : function undefined

unit-testing - 有没有办法使用 PHPUnit 来确保比较的 float 完全相等?

phpunit - Visual Studio 测试调试错误? (CI-PHPUnit 与/Xdebug)

php - 简单的代码不起作用