LARAVEL 5.0 +单元测试 - assertSessionHasErrors与不同的包

时间:2015-07-20 17:49:13

标签: php unit-testing laravel-5 laravel-validation laravel-request

我正在Laravel 5.0中编写单元测试,在我的请求类中,我使用不同的包来显示验证错误消息。

我在我的文件中使用它:

/* ExampleRequest.php */
namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Support\Facades\Auth;

class ExampleRequest extends Request {

    protected $errorBag = 'otherbag';

    public function rules(){
        return [
            'my_field' => 'required'
        ];
    }
}

在我的测试文件中,我正在测试使用它:

/* ExampleTest.php */
class ExampleTest extends TestCase {
    public function testPostWithoutData(){
        $response = $this->call('POST', 'url/to/post',[
            'my_field' => ''
        ]);
        $this->assertSessionHasErrors('my_field');
    }
}

如果我运行测试,它无法获得正确的断言并返回此问题:

  

会话缺失错误:my_field   声明falsetrue失败。

如果我从请求文件中取出$errorBag属性,我没有问题。

我可以根据需要提供更多细节。

2 个答案:

答案 0 :(得分:2)

您可以从会话商店获得一个备用包:

$myBag = $this->app('session_store')->getBag('otherBag');
$this->assertTrue($myBag->any());

但是,Laravel默认不使用备用包,所以我假设你在代码中做了一些事情,用会话处理程序注册你的App\Request::$errorBag

答案 1 :(得分:0)

我不知道你是否在其他地方设置会议,但我想你可能会做类似的事情:

$this->session(['foo' => 'bar']);

在会话中断言之前。 See testing helpers section for Laravel 5.0