断言模型不可搜索

时间:2018-07-19 12:16:44

标签: laravel unit-testing laravel-5 laravel-scout

我正在使用Laravel和Laravel Scout(以Algolia作为搜索后端)构建一个系统来管理公司的一些文章。

其中一项要求指出,只要更改文章中的某些内容,便会保留备份,以便我们证明在特定时间显示了某些信息。

我通过在更新之前克隆具有所有关系的现有文章来实现这一点。这是Article模型上的方法:

public function clone(array $relations = null, array $except = null) {
    if($relations) {
        $this->load($relations);
    }

    $replica = $this->replicate($except);
    $replica->save();

    $syncRelations = collect($this->relations)->only($relations);

    foreach($syncRelations as $relation => $models) {
        $replica->{$relation}()->sync($models);
    }

    return $replica;
}

问题是$replica->save()行。我需要先保存模型,以使其在同步关系时具有ID。

但是:阻止侦察兵为模型建立索引的唯一方法是,如果模型的archived_at字段设置为任何非null值。但是,由于这是原始模型的副本,因此该字段将按预期设置为null,并且仅在完成克隆过程后才更改。

问题:侦察员正在将克隆的模型同步到Algolia,所以我在那里重复了。我知道如何解决这个问题,方法是将克隆调用包装到withoutSyncingToSearchhttps://laravel.com/docs/5.6/scout#pausing-indexing)回调中。 但是,由于这非常重要,并且该错误已经存在,因此我想进行单元测试以支持我,因为它确实没有同步到Algolia。 我不知道如何进行测试,而寻找一种测试Scout的方法只会导致答案,告诉我不要测试Scout,而是可以对我的模型进行索引等。

问题:我如何创建一个单元测试来证明克隆的模型未同步到Algolia?

目前,我正在考虑创建一个自定义的Scout驱动程序进行测试,但这似乎对于测试一个功能完全是过头了。

0 个答案:

没有答案