Rails Rails Engine 如何测试

匿名 · 2012年07月20日 · 最后由 fredwu 回复于 2012年07月20日 · 2999 次阅读

我把系统的几个独立部分都用 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 里测试的. 同求方法.

匿名 #2 · 2012年07月20日

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

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

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

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

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

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

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

匿名 #7 · 2012年07月20日

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册