【问题标题】:Testing message passed to view测试消息传递给查看
【发布时间】:2018-01-23 17:14:23
【问题描述】:

如何测试我是否收到此消息:

public function doSomething()
{

if($ok){

  return view('message-page')
            ->with('title','The message?')
}

}

我可以断言什么来检查传递给视图的消息?

更新:

Laravel 5.5

我认为这很棘手,因为我没有进行 HTTP 调用,它会返回响应。我只是在做一个函数调用 ($foo->doSomething();),所以我没有得到响应。

我无法执行 GET,因为我需要传入一个模拟对象。到目前为止,这是我的测试:

    public function do_the_test()

{
     //Arrange

    $mockObject = Mockery::mock('App\MockObject');

    $authCode = 123456;

    $mockObject->shouldReceive('doSomething')->once()->with($authCode)->andReturn([
        'code' => '123456',
        'name' => 'joe',
        'username' => 'smith',
        'email' => 'joe@yahoo.co.uk',
        'domain' => 'yahoo.co.uk'
    ]);


//Act
    $object = new Foo($mockObject);
    $object->doSomething();

//Assert
    ??
    //check that view is returned with message text
}

进展:

我通过设置会话变量(而不是通过视图传递消息)然后使用assertEquals(); 进行检查来解决这个问题

如果能找到更好的方法就好了。

【问题讨论】:

    标签: php laravel testing phpunit


    【解决方案1】:

    不确定你有哪个 laravel 版本,但你仍然可以使用 assertViewHas($key, $value) 函数:

    public function testViewDoSomethingHasCorrectTitle()
    {
        $response = $this->call('GET', '/my_route');
        $this->assertViewHas('title', 'The message?')
    }
    

    https://laravel.com/docs/5.5/http-tests#assert-view-has

    【讨论】:

    • 调用未定义的方法Tests\Feature\Test::assertViewHas()
    【解决方案2】:

    只需执行dd(),您就会知道它是否已传递给控制器​​。

    在你看来做一个{{ dd($title) }}

    【讨论】:

    • 我正在尝试在测试中执行此操作。 dd 只会停止测试而不断言任何内容。
    • 它将验证消息是否已通过,并且您会继续往下走。
    • 我知道消息正在传递(我可以使用 Xdebug 逐步完成)。我需要一种在测试中断言这一点的方法。你了解什么是断言以及我为什么要这样做吗?
    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多