gpt4 book ai didi

php - 模拟 Eloquent 模型

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:32 25 4
gpt4 key购买 nike

我已经浏览了数百页,但我似乎无法找到与我在这些页面上找到的工作示例相比我的情况有何不同。

我正在使用 Laravel 4.2、PHPUnit 4.3.1 和来自 Composer 的最新 Mockery。我正在我的 Controller AppController 上运行 PHPUnit 测试,我想通过模拟模型来拦截 Eloquent 数据库 save() 。虽然在我创建模拟时没有抛出任何错误,但模拟也没有附加到我的模型,因此仍在创建行。

我在这里错过了什么?谢谢!

我的 Mockery 错误:Mockery\Exception\InvalidCountException:Mockery_0_EventRsvp 的方法 save() 应该恰好调用 1 次但调用了 0 次。

// Located at /app/tests/app/AppControllerTest.php
class AppControllerTest extends TestCase {
public function setUp() {
parent::setUp();
Session::start();
Mail::pretend();
}
public function tearDown() {
parent::tearDown();
\Mockery::close();
}
public function testPostApp() {
$myvar = array();
$this->mock = \Mockery::mock('Eloquent','EventRsvp');
$this->app->instance('EventRsvp', $this->mock);
$this->mock
->shouldReceive('save')
->once()
->andReturn('true');
$response = $this->call('POST', '/3tDYSL0', $myvar);
}
}

// Located at /app/controllers/AppController
class AppController extends BaseController {
public function saveApp($shortUrl){
$rsvp = new EventRsvp;
$rsvp->fieldone = '124';
$rsvp->fieldtwo = '30233';
$rsvp->save();

$returnredirect = Redirect::to(Request::path(). '/complete');
return $returnredirect;
}
}

// Located at /app/models/EventRsvp.php
<?
class EventRsvp extends Eloquent {

protected $guarded = array('id');
use Illuminate\Database\Eloquent\SoftDeletingTrait;
protected $dates = ['deleted_at'];

public function relationshipone()
{
return $this->belongsTo('RelationshipOne','idone');
}

public function relationshiptwo()
{
return $this->belongsTo('RelationshipTwo','idtwo');
}

}
?>

最佳答案

使用dependency injection而不是调用 new EventRsvp

您可能想要创建一个存储库,为您的 Controller 提供 EventRsvp,然后您可以轻松地模拟存储库并注入(inject)它而不是真正的。

如你所知,虽然实现你所尝试的目标是可行的,但我不会那样做:

$mock = Mockery::mock('overload:EventRsvp');
$mock->shouldReceive('save')->once()->andReturn(true);

$response = $this->call('POST', '/3tDYSL0', $myvar);

这是使用 Mockery 的实例模拟,它会在您的 Controller 中捕获 new EventRsvp 调用,并使用那个 $mock 而不是真实的模型。但同样,使用依赖注入(inject),这就是你想要的。

关于php - 模拟 Eloquent 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304009/

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