我有一个Rails 3应用程序,它使用子域来分隔不同的用例。正常的webapp请求转到www。,移动访问转到m。,并且对JSON api的请求是定向api ..
我的集成测试属于这些相同的部门。此外,我的所有webapp集成测试都使用相同的设置代码,移动集成测试使用不同的设置代码,api测试有自己的设置步骤。我想实现一些ActionDispatch::IntegrationTest
的子类,一个用于集成测试的每个“类”,以便干掉代码:
WebappIntegrationTest < ActionDispatch::IntegrationTest
MobileIntegrationTest < ActionDispatch::IntegrationTest
ApiIntegrationTest < ActionDispatch::IntegrationTest
这些子类都有设置和拆卸方法,可以处理准备测试环境以针对特定方案运行。
但是,我仍然希望能够在每个单独的测试类中定义设置和拆卸步骤。也就是说,我希望能够做到这一点:
class IntegrationTests::Webapp::AccountTest < WebappIntegrationTest
def setup
# ... do webapp account-specific setup ...
end
end
此课程中的每个测试都将执行AccountTest
设置和WebappIntegrationTest
设置。特定于类的设置需要是可选的,但每次都需要执行特定于子域的设置,无论是否定义了特定于类的设置。
以下是我考虑过的一些方法:
AccountTest
设置会破坏WebappIntegrationTest
设置。 WebappIntegrationTest
实现设置,然后为AccountTest
声明一个新的回调来有选择地实现,称之为“setup_extension”......但我不想更改API:I希望新开发人员能够继续在测试文件中定义“设置”,而忽略了另一个设置被称为上游的事实。 alias_method_chain
将WebappIntegrationTest
设置放在回调方法链的中间但是(a)我无法让它工作(ruby投掷并且错误说它不能完全找到setup_with_x方法),并且(b)我相信在这个解决方案中,WebappIntegrationTest
只有在AccountTest
实现设置时才会被调用,我不能指望所有测试文件(虽然我在这一点上可能错了)希望这个解释很清楚......
关于将共享设置代码拉入特定于子域的基类(使用针对该类型的每个测试运行的设置代码)的优雅方式的任何想法,同时保留API(测试类能够< em>可选另外实现自己的方法“setup”?