单元测试
默认情况下,Rails 在其内置测试中使用 test/unit(现在为 minitest)。这是 ruby 标准库的一部分,具有轻量级且不需要进一步依赖的优点。
Rspec 是测试/单元的替代方案,它功能非常全面,并使用不同的语言来尝试帮助推动 BDD/TDD 流程。对比示例:
# minitest
def test_new_users_should_be_active
user = User.new
assert_equal true, user.active?
end
# rspec
describe User do
it 'should be active' do
User.new.active?.should be true
end
end
这两种方法都可以在任一框架中以多种方式编写,但希望这有助于让您了解它们之间的差异。 Here is some more discussion 关于 minitest 和 rspec 的区别。
工厂
Factory_girl 是一个库,可以与 rspec 或 minitest 一起使用来创建工厂对象,以简化具有更复杂设置的测试。 Here is some discussion 关于为什么你可能想要使用工厂库而不是夹具(默认情况下内置于 Rails 测试中)。
端到端测试
Capybara 和 webrat 是两个库,它们堆叠在 minitest 或 rspec 之上,允许您进行集成测试。因此,这些允许您针对通过浏览器运行的完整应用程序运行测试,这样您就可以执行诸如填写表格、单击链接并验证您所期望的端到端的事情是否真的发生了。
这些类型的集成测试往往比单元测试慢得多,但对于验证应用程序中的关键路径非常有帮助。 Capybara 现在得到更频繁的维护,我建议进行此类测试。
验收测试
Cucumber 位于任何这些工具之上,让您可以用简单的英语编写测试,然后通过 DSL 将其翻译成可重复的步骤来运行您的实际测试。当您的客户或项目经理不编码或您希望能够轻松地用英语交流需求时,这尤其有用。
如果这个项目只有你,我现在可能会跳过这个。
持续集成
您可以随时手动运行测试,也可以使用持续集成服务自动为您运行测试。有几个不错的:
我对 Travis 有很多经验,但也听说过其他人的好消息。如果您想运行自己的 CI 服务器,Jenkins 是一个不错的选择。
打破它
让我们将这些应用到您要编写的测试类型的具体示例中:
使用 minitest(内置测试)或 rspec
- 编写模型 - 测试它是否按预期工作?
- 写入控制器 - 它是否按预期应用业务逻辑?
- 前端:模板是否按预期呈现
Rails 调用模型测试单元测试和控制器测试功能测试,但它们实际上都是单元测试的两种类型。
测试您的视图可以通过使用在控制器测试中生成的主体上的断言来完成 (example)。 rspec breaks out view tests 变成自己的类型。
将水豚用于
- 作为用户场景:我的网页在用户操作(登录或未登录场景)上是否按预期工作。 (例如,如果我点击排序链接,那么数据是否会被排序(使用 ajax)。当用户悬停一个 div 时,它会将颜色变为黑色等)
手动运行或(更好)使用持续集成服务
- 现在我想在 heroku/aws/engineyard 等上部署我的代码,所以我想在部署代码之前运行一个完整的测试(冒烟测试、集成测试?)。
更多资源