gpt4 book ai didi

php - mockery->shouldReceive() 在不应该通过的时候通过了?

转载 作者:可可西里 更新时间:2023-11-01 13:36:21 26 4
gpt4 key购买 nike

我正在使用 phpunit 和 mockery 在 laravel 中学习单元测试。我目前正在尝试测试 UsersController::store()。

我正在模拟用户模型并使用它来测试索引方法,这似乎有效。当我取出 $this->user->all() 时,测试失败,当它通过时。

在测试存储方法时,尽管我使用模拟来测试用户模型是否接收过一次 validate()。 store 方法是空的,但测试通过了。为了简洁起见,我省略了类(class)中不相关的部分

<?php

class UsersController extends BaseController {

public function __construct(User $user)
{
$this->user = $user;
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$users = $this->user->all();

return View::make('users.index')
->with('users', $users);
}

/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return View::make('users.create');
}

/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}

}

UserControllerTest.php

<?php
use Mockery as m;
class UserControllerTest extends TestCase {

public function __construct()
{
$this->mock = m::mock('BaseModel', 'User');
}

public function tearDown()
{
m::close();
}

public function testIndex()
{
$this->mock
->shouldReceive('all')
->once()
->andReturn('All Users');
$this->app->instance('User', $this->mock);
$this->call('GET', 'users');
$this->assertViewHas('users', 'All Users');
}

public function testCreate()
{
View::shouldReceive('make')->once();
$this->call('GET', 'users/create');
$this->assertResponseOk();
}

public function testStore()
{

$this->mock
->shouldReceive('validate')
->once()
->andReturn(m::mock(['passes' => 'true']));
$this->app->instance('User', $this->mock);
$this->call('POST', 'users');
}


}

最佳答案

默认情况下,Mockery 是一个 stub 库,而不是一个模拟库(因其名称而令人困惑)。

这意味着 ->shouldReceive(...) 默认是“零次或多次”。当使用 ->once() 时,你说它应该被调用零次或一次,但不能更多。这意味着它总会过去。

当你想断言它被调用一次时,你可以使用->atLeast()->times(1)(一次或多次)或->times(1 )(恰好一次)

关于php - mockery->shouldReceive() 在不应该通过的时候通过了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531033/

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