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......

June 30, 2012

JavaScript MVC 和 RESTful Web API

最近 Web 开发的一个趋势是在前端(Javascript)应用 MVC 架构, 主要是让浏览器处理大部分的功能,比如界面展示和交互, 服务器端仅提供数据和服务接口。

JavaScript MVC

JavaScript MVC 架构与使用 Ruby on Rails, Django, Struts 等框架的传统开发的一个主要区别, 是在浏览器端处理 HTML 视图。传统的流程一般在服务器端生成需要显示给用户的 HTML,然后通过 HTTP 响应发送到用户的浏览器直接显示。而 Javascript MVC 的方法一般是提前下载好需要显示的 HTML 视图/模板, 然后根据从服务器得到的数据,......