我把系统的几个独立部分都用 engine 分开,但是每个 engine 都是共用 main app 的 model,在 engine 中只有 controller,现在想对 engine 中的 controller 测试,有些疑问。
engine 默认有 dummy 的测试方式,但是 dummy 是一个模拟的 rails app,没有 main app 中 db schema,也没有 model。
我想有两种方式解决:
不知道大家是怎么测试 engine 的?对于这个场景有啥好的建议?
的确是个头疼的问题。之前做 socialspring 的时候也有这个问题。直接在 Engine 测试显得麻烦,最后在 main app 里测试的。同求方法。
#1 楼 @yedingding 确实在 main app 里测试,依赖关系简单点,我也这样吧
我是直接在 dummy 中使用依赖的模型,其实这些模型就是 mock。
这里有一个解耦的问题,如果已经剥离出了 engine,那么应该在模型上有所独立,与 main app 里面的业务关系要尽量剥的干净些,有些业务逻辑会涉及很多表,这时应该委托给某几个专门提供对外服务的领域模型,如果依赖的模型比较少,那么 engine 的测试成本就不会太高了
其实这些是以前用 java 开发形成的经验,在规模变大的时候,有必要回过头看看以前积累的一些经验
#2 楼 @yggg 非常反对直接在 main app 里测试,看起来省事,但是会导致拆分应用的目标被“打折”了
我现在只是搞了个 dummy,然后人工用 rackup 启动来测试
#3 楼 @fsword 嗯,解耦很重要。之所以没做是因为有洁癖,不喜欢把上层使用的逻辑放到 Engine 里来.... 主要还是看 Engine 的使用场景
#3 楼 @fsword 说的有道理,但是我独立成 engine 的目的,不是真正意义上的把共用的模块独立出来为了复用,我只是简单的把子系统的代码独立,以前是用的 namespace,但是 namespace 在 route helper 上会都要加上 namespace,造成 route helper 难读。 所以所有 model 在每个 engine 都是共用的,没法真正的解耦
如果放在 main app 里测试,那还不如不要做成 engine……