控制器的功能测试
require File.dirname(__FILE__) + '/../test_helper'
关键在于setup方法,有三个东西
1.controller
2.request
3.response
get()方法时由测试辅助类提供的,它会模拟controller的web请求,并获取控制器的响应,
然后用assert_response来检查是否应答正确
-n可以指定运行某一个特定的测试方法
ruby test/functional/logni_controller_test.rb -n test_index
assert_redirected_to :action=>”login”
Dynamic Fixtures
在夹具中也可以使用ruby代码动态加入
assert_template “index” 对模版进行断言
测试登录
def test_login
dave = users(:dave)
post :login, :nmae=>dave.name, :password=>'secret'
assert_redirected_to :action=>"index"
assert_equal dave.id, session[:user_id]
end
HTTP请求方法
get() 对指定的action执行一次HTTP GET请求,并将结果放入HTTP RESPONSE
例: get(action,parameteres=nil,session=nil,flash=nil)
post() 提交表单
例: post :edit, :user => {:name => "dave", :age => "24"}
模拟XMLHttp请求
xhr(method,action,parameters,session,flash)
put(),delete(),head()
功能测试的断言
assert_dom_equal(expected_html,actual_html,message)
例:assert_dom_equal(expected,@response.body)
assert_response(type,message)
type的种类
1.:success
2.:redirect
3.:missing
4.:error
例:assert_response :success
变量
assigns(key=nil)
assert_not_nil assigns["items"]
session
assert_equal 2, session[:cart].items.size
flash
assert_equal "Danger!", flash[:notice]
cookies
assert_equal "Danger!", cookies[:name]
redirect_to_url
assert_equal "http://test.host/login", redirect_to_url
辅助方法
find_tag(conditions)
find_all_tag(conditions)
follow_redirect
fixture_file_upload(path,mime_type)
测试response的content
使用强大的assert_select
assert_select "title", "TEST"