Rails Rails Engine 如何测试

Guest · 发布于 2012年07月20日 · 最后由 fredwu 回复于 2012年07月20日 · 2044 次阅读
96

我把系统的几个独立部分都用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的? 对于这个场景有啥好的建议?

共收到 8 条回复
6

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

96

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

244

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

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

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

244

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

De6df3

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

6

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

96

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

188

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

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