laravel - 断言模型不可搜索
问题描述
我正在构建一个系统来管理我公司的一些文章,使用 Laravel 和 Laravel Scout 以及 Algolia 作为搜索后端。
其中一项要求规定,每当文章中的某些内容发生更改时,都会保留备份,以便我们可以证明某些信息是在特定时间显示的。
我通过在更新之前克隆现有文章及其所有关系来实现这一点。这是文章模型上的方法:
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。
但是:阻止 scout 索引模型的唯一原因是模型的archived_at
字段是否设置为任何非null
值。但由于这是原始模型的克隆,因此该字段null
按预期设置,并且仅在克隆过程完成后更改。
问题: Scout 正在将克隆模型同步到 Algolia,所以我在那里有重复。我知道如何通过将克隆调用包装到withoutSyncingToSearch
(https://laravel.com/docs/5.6/scout#pausing-indexing)回调中来解决这个问题。但是由于这非常重要并且错误已经存在,我希望有一个单元测试来支持我,它确实没有同步到 Algolia。我不知道如何测试这一点,并且寻找一种测试 Scout 的方法只会导致答案告诉我不要测试 Scout,而是我的模型可以被索引等。
问题:如何创建一个单元测试来证明克隆模型没有同步到 Algolia?
目前我正在考虑创建一个自定义的 Scout 驱动程序进行测试,但对于测试一个单一的功能来说,这似乎是一种过大的杀伤力。
解决方案
推荐阅读
- django - 未为某些用户设置 django CSRF 令牌 cookie
- dialogflow-es - Pepper Host/Chat 的帐户是什么?
- .net - 尝试在 .Net 中安装软件包时出错
- reactjs - 按钮点击反应导航到其他页面
- c# - 我无法将 pos 打印机添加到 posdm(configuration.xml 或命令行 adddevice)
- php - 如何在此 PHP 数组中获取特定值?
- ios - Xcode 11中呈现的ViewController内部的CollectionViewCell扭曲了单元格大小
- asp.net-mvc - razor 中的字符串变量如何成为 java 脚本中的 html 元素
- sqlite - 为什么我的 SQLite 数据库在我关闭应用程序之前不添加数据?
- reactjs - 如何使用 React 创建一个可以实时预览小部件并生成小部件可嵌入链接的门户