Rails Rails Engine 如何测试

Unknow user · July 20, 2012 · Last by fredwu replied at July 20, 2012 · 3772 hits

我把系统的几个独立部分都用 engine 分开,但是每个 engine 都是共用 main app 的 model,在 engine 中只有 controller,现在想对 engine 中的 controller 测试,有些疑问。

engine 默认有 dummy 的测试方式,但是 dummy 是一个模拟的 rails app,没有 main app 中 db schema,也没有 model。

我想有两种方式解决:

  1. 不用 dummy 测试,直接 load main app 来 mount engine,这样就有整个 main app 的 env
  2. 不在 engine 中测试,在 main app 中测试 engine 的 controller

不知道大家是怎么测试 engine 的?对于这个场景有啥好的建议?

的确是个头疼的问题。之前做 socialspring 的时候也有这个问题。直接在 Engine 测试显得麻烦,最后在 main app 里测试的。同求方法。

Unknow user #2 July 20, 2012

#1 楼 @yedingding 确实在 main app 里测试,依赖关系简单点,我也这样吧

我是直接在 dummy 中使用依赖的模型,其实这些模型就是 mock。

这里有一个解耦的问题,如果已经剥离出了 engine,那么应该在模型上有所独立,与 main app 里面的业务关系要尽量剥的干净些,有些业务逻辑会涉及很多表,这时应该委托给某几个专门提供对外服务的领域模型,如果依赖的模型比较少,那么 engine 的测试成本就不会太高了

其实这些是以前用 java 开发形成的经验,在规模变大的时候,有必要回过头看看以前积累的一些经验

#2 楼 @yggg 非常反对直接在 main app 里测试,看起来省事,但是会导致拆分应用的目标被“打折”了

我现在只是搞了个 dummy,然后人工用 rackup 启动来测试

#3 楼 @fsword 嗯,解耦很重要。之所以没做是因为有洁癖,不喜欢把上层使用的逻辑放到 Engine 里来.... 主要还是看 Engine 的使用场景

Unknow user #7 July 20, 2012

#3 楼 @fsword 说的有道理,但是我独立成 engine 的目的,不是真正意义上的把共用的模块独立出来为了复用,我只是简单的把子系统的代码独立,以前是用的 namespace,但是 namespace 在 route helper 上会都要加上 namespace,造成 route helper 难读。 所以所有 model 在每个 engine 都是共用的,没法真正的解耦

如果放在 main app 里测试,那还不如不要做成 engine……

You need to Sign in before reply, if you don't have an account, please Sign up first.