March 10, 2013

在 Rails 项目中使用 Cucumber 进行验收测试

(注:文中用到的项目源码位于 github)

在某些情况下,Cucumber 非常适合用来做验收测试。

1. 在 Rails 项目中配置 Cucumber

在 Gemfile 中的 test 区域添加:

group :test do

gem 'cucumber-rails', :require => false

end

然后执行 bundle install。

接下来执行 rails generate cucumber:install (可以先在后面加 --help 查看可用的选项)。

2. 一个简单的测试

创建 features/view_posts......

October 21, 2012

使用 Rspec, Capybara 和 Zeus 等测试 Rails 项目

1. Rails 项目测试

在此我们关注下面两种类型的测试:

单元测试:

针对 models, helpers, mailers 和 lib 等下的代码.

测试代码位于 spec 文件夹下的同名的子文件夹, 例如 spec/models.

测试文件的相对路径和要测试的文件保持一致, 文件名加 _spec, 例如

app/models/user.rb 的单元测试文件应该位于 spec/models/user_spec.rb

验收测试:

模拟用户在浏览器的操作, 对网站的功能进行测试.

验收测试以功能模块为单位进行测试, 例如用户注册, 添加文章等.

验收测试的代码位于 spec/reque......

August 22, 2012

Rails ActiveRecord Callback 的返回值

Rails 提供的约定非常强大而且灵活, 但是需要熟练掌握和小心使用. 最近我就由于没注意 active-record callback 的一个约定而中枪.

问题的现象是当保存一个 model 的对象时, 结果被 rollback 并且抛出了 ActiveRecord::RecordInvalid 错误. 当我查看这个对象的 errors 时, 发现并没有错误, valid? 也返回 true.

最终发现是由于这个 model 的一个 before_create callback 无意中返回了 false 也导致对象保存失败. Rails 官方的 guides描述如下:

The who......