php - 在 Laravel 中对闭包进行单元测试

标签 php unit-testing laravel mockery

下面代码中的闭包使得这段代码很难测试。我怎样才能继续急切加载这些项目并保持完整的可测试性?

public function scopeWithCompanyPreferences(Builder $builder)
{
    return $builder->with([
            'companies' => function ($query) {
                $query->with('companies');
                $query->with('preference_settings');
                $query->with('parent_company');
            }
        ]);
}

我已经看到使用 Mockery 使用 Mockery::on() ,但我认为鉴于数组没有用。

最佳答案

如果你在 mock with方法,你应该可以使用 Mockery::on()像这样:

$b = \Mockery::mock("your_builder_class");
$b->shouldReceive("with")
    ->with(\Mockery::on(function($x){
            // test $x any way you like, for example...
            // ...a simple check to see if $x["companies"] is a function
            return is_callable($x["companies"]);
        }))
    ->once()
    ->andReturn("hello!");

关于php - 在 Laravel 中对闭包进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770843/

相关文章:

php - mysqli 查询返回错误值

php - 未创建 Laravel 迁移表

unit-testing - 如何在 fetch-mock 中模拟多个获取?

javascript - 按传单喜欢 Laravel 5.2 订购

php - Laravel DB::RAW 获取单个

php - 向 Stripe Checkout Session 添加免费的 $0 项目

php - 附加到 php 指令而不是替换?

c# - 如何在 C# AspNet Core 中模拟 LoggerFactory

php - 与用户一起创建单元测试

php - 如何在 Laravel 中以正确的方式设置路由、 Controller 和 View ?