插件是否无法使用 `type: group` 并传递 specs?

如果一个插件使用了 type: group,则必须在运行测试规范(specs)之前创建该组(例如,在数据库迁移时,或者在 after_initialize 阶段),否则测试会失败(因为设置中包含了一个不存在的组)。我的解决方案是将这些 type: group 设置改为 type: text。这样,设置就不会因为组不存在而失败;我可以在测试规范中使用 let! 来创建这些组,而在运行 Group 相关的测试规范时,这些组会自动消失。

如果有更好的方法,我很乐意听取。就这个案例而言,我可能永远不需要更改每个用途所对应的组,因此完全可以将它们硬编码在插件中,而不必作为设置项。

我是如何想到上述方案的

我有一个插件需要一组组(groups)。当用户被添加到某个组时,我的模型中会执行相应的操作。在生产和开发数据库中,一切运行正常。太棒了!:tada:

问题在于,对于测试规范(specs):要么组被创建了(我尝试过在 after_initialize 调用的函数中创建,或者通过迁移期间运行的 fixtures 来创建),但这会破坏核心的 Group 测试规范(例如,这些规范期望存在特定数量的预定义组);要么组没有被创建,这又会导致我的测试规范失败。

我在 Group 模型中重写了 refresh_automatic_groups 方法,让它删除我创建的组。这解决了除一个测试外的所有问题,因为我的组名中包含了一些与那些字符串重叠的名称,而那个特定的测试并没有调用 refresh_automatic_groups

相关测试代码位于:

因此,我的解决方案是只使用不会破坏该测试的组名。

编辑(再次):但现在我在 destroy_task_spec.rbgroup_controller 中仍然遇到了错误。

是我漏掉了什么简单的技巧,还是我需要让这个插件不再自动创建组?