【发布时间】:2015-12-14 21:32:30
【问题描述】:
我正在为我的 laravel 5 应用程序编写单元测试。在一个测试中,我调用了一个函数,并且需要验证它是否在被测函数中调用了另一个模型的静态 create 方法。
我不想真正将任何资源持久化到数据库中。
我创建了一个模拟对象,指定了期望,并将其绑定到应用程序实例,但是当调用 create 时,应用程序会尝试运行 SQL,而不是让模拟对象拦截函数调用。
public function testLogCreation() {
$this->log = Mockery::mock('App\Models\Log');
$this->log->shouldReceive('create')->once();
$this->app->instance('App\Models\Log',$this->log);
echo get_class($this->app['App\Models\Log']); // output: Mockery_2_App_Models_Log
}
有 1 个错误
SQLSTATE[23503]:外键违规:7 错误:在表“日志”上插入或更新违反外键约束....
我也尝试了$this->log->shouldReceive('save')->once();,因为我观察到静态create 函数调用公共save 函数,但我认为我没有在log 的正确实例上创建模拟期望。
如果这不能完成,有什么替代策略的建议吗?
谢谢!
【问题讨论】:
标签: php unit-testing laravel eloquent mockery