许多方法都可以开发、测试和集成 Rails 应用程序:例如使用基础的 Test:Unit 或 ZenTest 进行测试驱动开发,利用 RSpec 、 Shoulda 或 Cucumber 进行行为驱动开发。当然也可以编写自定义的 RSpec 匹配器。
然而,我们却很难找到合适的工具,并挖掘它们的最佳实践。 Remarkable 试图将这些工具的语法统一起来,并添加更多特性,从而避免 Rails 行为驱动开发的痛苦。
Remarkable 框架使用了自己的 DSL(领域特定语言)。它通过提供宏与国际化的支持对 RSpec 进行了扩展。它提供了一个详尽的 RSpec 匹配器集合,能够根据各种选项转换所有的 ActiveRecord 验证。这些选项包括:through, :source, :source_type, :class_name, :foreign_key 等。它同时还为 ActionController 提供了一个匹配器集合。
我们可以使用类似 RSpec 或 Shoulda 的语法(来源于 Remarkable 项目网站):
1) it { should validate_numericality_of(:age)<wbr></wbr>.greater_than(18).only_integer } 2) it { should validate_numericality_of(:age, :greater_than => 18, :only_integer => true) } 3) should_validate_numericality_<wbr></wbr>of :age, :greater_than => 18, :only_integer => true 4) should_validate_numericality_<wbr></wbr>of :age do |m| m.only_integer m.greater_than 18 # Or: m.greater_than = 18 end
这样我们就可以非常容易地编写模型的规格说明:
describe Post do should_belong_to :user should_have_many :comments should_have_and_belong_to_many :tags should_validate_presence_of :body should_validate_presence_of :title should_validate_uniqueness_of :title, :allow_blank => true end
现在可以获取 Remarkable 3.0 版本,该项目还在持续更新中;下一个版本将提供更多的 Rails 匹配器,例如对 ActionView 的支持。
评论