gpt4 book ai didi

php - 用 mock 测试 Laravel 外观总是会通过,即使它应该失败

转载 作者:行者123 更新时间:2023-12-02 03:01:40 25 4
gpt4 key购买 nike

我试图在单元测试期间模拟 Laravel 中的一些外观,但似乎无论如何测试总是会通过。

例如,此示例取自 Laravel 文档:

Event::shouldReceive('fire')->once()->with('foo', array('name' => 'Dayle'));

看来我可以将其放入任何测试方法中,并且它们总是通过,即使没有对 Event 外观进行任何此类操作。

这是测试类:

class SessionsControllerTest
extends TestCase
{
public function test_invalid_login_returns_to_login_page()
{
// All of these pass even when they should fail
Notification::shouldReceive('error')->once()->with('Incorrect email or password.');
Event::shouldReceive('fire')->once()->with('foo', array('name' => 'Dayle'));
Notification::shouldReceive('nonsense')->once()->with('nonsense');

// Make login attempt with bad credentials
$this->post(action('SessionsController@postLogin'), [
'inputEmail' => 'bademail@example.com',
'inputPassword' => 'badpassword'
]);

// Should redirect back to login form with old input
$this->assertHasOldInput();
$this->assertRedirectedToAction('SessionsController@getLogin');
}

}

为了测试 Facades,我缺少什么?我是否认为我应该能够在任何 Laravel Facade 上调用 shouldReceive() 而无需任何设置?

最佳答案

您需要告诉mockery 运行它的验证。您可以通过放置来做到这一点

\Mockery::close();

在测试方法的末尾,或者在测试类的拆卸方法中。

或者,您可以通过将其添加到 phpunit.xml 来设置 mockery 的 phpunit 集成

<listeners>
<listener class="\Mockery\Adapter\Phpunit\TestListener"></listener>
</listeners>

参见http://docs.mockery.io/en/latest/reference/phpunit_integration.html欲了解更多信息。

关于php - 用 mock 测试 Laravel 外观总是会通过,即使它应该失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com