Rails測試分三種:
1,關(guān)注于一個單獨的Model的單元測試Unit test
2,關(guān)注于一個單獨的Controller和它使用的models之間的交互的功能測試Functional test
3,關(guān)注story級的多個controllers的多個actions之間的交互的集成測試Integration test
今天我們就來看看跨越多個controllers的集成測試
IntegrationTesting/test/integration/stories_test.rb
其中我們將一些通用的流程做成helper方法,如go_to_login,go_to_signup,signup
我們甚至可以將登錄認證等通用流程做成一個helper方法并放在我們自己的DSL模塊里:
我們會發(fā)現(xiàn)集成測試比單獨Controller的功能測試慢許多,因為集成測試涉及的東西太多
1,關(guān)注于一個單獨的Model的單元測試Unit test
2,關(guān)注于一個單獨的Controller和它使用的models之間的交互的功能測試Functional test
3,關(guān)注story級的多個controllers的多個actions之間的交互的集成測試Integration test
今天我們就來看看跨越多個controllers的集成測試
IntegrationTesting/test/integration/stories_test.rb
- require "#{File.dirname(__FILE__)}/../test_helper"
- class StoriesTest < ActionController::IntegrationTest
- fixtures :accounts, :ledgers, :registers, :people
- def test_signup_new_person
- go_to_login
- go_to_signup
- signup :name => "Bob",
- :user_name => "bob",
- :password => "secret"
- end
- private
- def go_to_login
- get "/login"
- assert_response :success
- assert_template "login/index"
- end
- def go_to_signup
- get "/signup"
- assert_response :success
- assert_template "signup/index"
- end
- def signup(options)
- post "/signup", options
- assert_response :redirect
- follow_redirect!
- assert_response :success
- assert_template "ledger/index"
- end
- end
其中我們將一些通用的流程做成helper方法,如go_to_login,go_to_signup,signup
我們甚至可以將登錄認證等通用流程做成一個helper方法并放在我們自己的DSL模塊里:
- require "#{File.dirname(__FILE__)}/../test_helper"
- class StoriesTest < ActionController::IntegrationTest
- fixtures :accounts, :ledgers, :registers, :people
- def test_multiple_users
- jim = new_session_as(:jim)
- bob = new_session_as(:bob)
- stacey = new_session_as(:stacey)
- jim.selects_ledger(:jims)
- jim.adds_account(:name => "checking:)
- bob.goes_to_preferences
- stacey.cancels_account
- end
- private
- module MyTestingDSL
- attr_reader :person
- def logs_in_as(person)
- @person = people(person)
- post authenticate_url, :user_name => @person.user_name, :password => @person.password
- is_redirected_to "ledger/list"
- end
- def goes_to_preferences
- # ...
- end
- def cancels_account
- # ...
- end
- def new_session_as(person)
- new_session do |sess|
- sess.goes_to_login
- sess.logs_in_as(person)
- yield sess if block_given?
- end
- end
- end
我們會發(fā)現(xiàn)集成測試比單獨Controller的功能測試慢許多,因為集成測試涉及的東西太多
安徽新華電腦學校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢】