3. 文件在spec目录下创建spec.opts(路径为platform_base/spec/spec.opts),内容如下:
--colour
--format progress
--loadby mtime
--reverse
4. 在spec目录下,创建一个Rails app,名为test_app。这个新应用需要有spec目录和spec_helper.rb文件。
5. 为了保持简化,把这个新app(test_app)整理一下,删除vendor和public目录,最终的结构如下:
test_app
|- app
|- config
| |- environments
| |- initializers
| |- app_config.yml
| |- boot.rb
| |- database.yml
| |- environment.rb
| - routes.rb
|- db
| - test.sqlite3
|- log
- spec
- spec_helper.rb
6. 在config/environment.rb配置文件中,增加如下代码:
Rails::Initializer.run do |config| config.gem 'rails_platform_base' end
7. 在platform_base/spec/目录下增加helpers_spec.rb文件,内容如下:
require File.join(File.dirname(__FILE__), 'test_app/spec/spec_helper')
describe "helpers" do
describe "url_of" do
before do
Rails.stub!(:env).and_return("development")
@controller = ActionController::Base.new
end
it "should get url from app's configration" do
@controller.url_of(:article, :comments, :article_id => 1).should == "http://www.idapted.com/article/articles/1/comments"
@controller.url_of(:article, :comments, :article_id => 1, :params=>{:category=>"good"}).should == "http://www.idapted.com/article/articles/1/comments?category=good"
end
end
end
至此,准备工作已经就绪,可以在platform_base目录下,运行rake spec来进行测试,当然现在什么都不会发生,因为还没有测试代码呢。本方法中,最关键的就是下面的require语句,不仅加载了Rails environment,而且把gem在test_app中使用并测试。
require File.join(File.dirname(__FILE__), 'test_app/spec/spec_helper')
Controller的测试
对于controller的测试,一般来说比较简单,基本是三段式:初始化参数、请求方法、返回render或者redirect_to。如下例中,对某个controller的index方法的测试:
describe "index action" do
it "should render report page with the current month report" do
controller.stub!(:current_user).and_return(@user)
get :index,{:flag => “test”}
response.should render_template("index")
end
end
有些controller会设置session或者flash,这时的测试代码就一定要检查这个值设置的是否正确,而且还需要增加测试用例来覆盖不同的值,这样才能对方法进行全面的测试。如下例:










