如何对 Vapor DB 对象进行单元测试

How to unit test Vapor DB Objects

我有以下简单的对象关系:

public final class Planet: Model {
    
    @ID(key: .id)
    public var id: UUID?
    
    @Parent(key: .starId)
    public var star: Star

当应用程序使用真实数据库运行时,一切正常,在分配给子数据库之前从数据库中查询父数据库。 我在逻辑级别有许多单元测试,我需要一个对象来测试某些条件并且没有数据库,即我太天真了

let star = Star()
var planet = Planet()
planet.star = star

这在最后一行失败,出现异常“使用 $ 前缀访问”。错误是伪造的,真正的原因是 Vapor/Fluent 对象绑定到数据库。 有没有一种简单的方法可以在不实例化数据库的情况下完成这项工作?

错误不是伪造的,错误是正确的。这与 属性 包装器的工作方式有关,并且 Fluent 需要保护对关系的访问,以防它们没有被急切加载。

如果你想手动设置一个关系,你可以这样做

planet.$star.value = star

您可以找到更多信息(以及上面的代码示例)in the docs