Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
542ddde5
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
542ddde5
编写于
9月 23, 2009
作者:
J
Joshua Peek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move helpers specific to functional tests out of TestProcess into AC::TestCase
上级
4a55d1de
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
152 addition
and
163 deletion
+152
-163
actionpack/lib/action_controller/testing/process.rb
actionpack/lib/action_controller/testing/process.rb
+0
-151
actionpack/lib/action_controller/testing/test_case.rb
actionpack/lib/action_controller/testing/test_case.rb
+149
-1
actionpack/test/template/url_helper_test.rb
actionpack/test/template/url_helper_test.rb
+3
-11
未找到文件。
actionpack/lib/action_controller/testing/process.rb
浏览文件 @
542ddde5
require
'action_dispatch'
require
'rack/session/abstract/id'
require
'active_support/core_ext/object/conversions'
module
ActionController
#:nodoc:
class
TestRequest
<
ActionDispatch
::
TestRequest
#:nodoc:
def
initialize
(
env
=
{})
super
self
.
session
=
TestSession
.
new
self
.
session_options
=
TestSession
::
DEFAULT_OPTIONS
.
merge
(
:id
=>
ActiveSupport
::
SecureRandom
.
hex
(
16
))
end
def
assign_parameters
(
controller_path
,
action
,
parameters
)
parameters
=
parameters
.
symbolize_keys
.
merge
(
:controller
=>
controller_path
,
:action
=>
action
)
extra_keys
=
ActionController
::
Routing
::
Routes
.
extra_keys
(
parameters
)
non_path_parameters
=
get?
?
query_parameters
:
request_parameters
parameters
.
each
do
|
key
,
value
|
if
value
.
is_a?
Fixnum
value
=
value
.
to_s
elsif
value
.
is_a?
Array
value
=
ActionController
::
Routing
::
PathSegment
::
Result
.
new
(
value
)
end
if
extra_keys
.
include?
(
key
.
to_sym
)
non_path_parameters
[
key
]
=
value
else
path_parameters
[
key
.
to_s
]
=
value
end
end
params
=
self
.
request_parameters
.
dup
%w(controller action only_path)
.
each
do
|
k
|
params
.
delete
(
k
)
params
.
delete
(
k
.
to_sym
)
end
data
=
params
.
to_query
@env
[
'CONTENT_LENGTH'
]
=
data
.
length
.
to_s
@env
[
'rack.input'
]
=
StringIO
.
new
(
data
)
end
def
recycle!
@formats
=
nil
@env
.
delete_if
{
|
k
,
v
|
k
=~
/^(action_dispatch|rack)\.request/
}
@env
.
delete_if
{
|
k
,
v
|
k
=~
/^action_dispatch\.rescue/
}
@env
[
'action_dispatch.request.query_parameters'
]
=
{}
end
end
class
TestResponse
<
ActionDispatch
::
TestResponse
def
recycle!
@status
=
200
@header
=
{}
@writer
=
lambda
{
|
x
|
@body
<<
x
}
@block
=
nil
@length
=
0
@body
=
[]
@charset
=
nil
@content_type
=
nil
@request
=
@template
=
nil
end
end
class
TestSession
<
ActionDispatch
::
Session
::
AbstractStore
::
SessionHash
#:nodoc:
DEFAULT_OPTIONS
=
ActionDispatch
::
Session
::
AbstractStore
::
DEFAULT_OPTIONS
def
initialize
(
session
=
{})
replace
(
session
.
stringify_keys
)
@loaded
=
true
end
end
# Essentially generates a modified Tempfile object similar to the object
# you'd get from the standard library CGI module in a multipart
# request. This means you can use an ActionController::TestUploadedFile
...
...
@@ -87,75 +15,6 @@ def initialize(session = {})
TestUploadedFile
=
Rack
::
Test
::
UploadedFile
module
TestProcess
def
self
.
included
(
base
)
# Executes a request simulating GET HTTP method and set/volley the response
def
get
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"GET"
)
end
# Executes a request simulating POST HTTP method and set/volley the response
def
post
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"POST"
)
end
# Executes a request simulating PUT HTTP method and set/volley the response
def
put
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"PUT"
)
end
# Executes a request simulating DELETE HTTP method and set/volley the response
def
delete
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"DELETE"
)
end
# Executes a request simulating HEAD HTTP method and set/volley the response
def
head
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"HEAD"
)
end
end
def
process
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
,
http_method
=
'GET'
)
# Sanity check for required instance variables so we can give an
# understandable error message.
%w(@controller @request @response)
.
each
do
|
iv_name
|
if
!
(
instance_variable_names
.
include?
(
iv_name
)
||
instance_variable_names
.
include?
(
iv_name
.
to_sym
))
||
instance_variable_get
(
iv_name
).
nil?
raise
"
#{
iv_name
}
is nil: make sure you set it in your test's setup method."
end
end
@request
.
recycle!
@response
.
recycle!
@controller
.
response_body
=
nil
@controller
.
formats
=
nil
@controller
.
params
=
nil
@html_document
=
nil
@request
.
env
[
'REQUEST_METHOD'
]
=
http_method
parameters
||=
{}
@request
.
assign_parameters
(
@controller
.
class
.
name
.
underscore
.
sub
(
/_controller$/
,
''
),
action
.
to_s
,
parameters
)
@request
.
session
=
ActionController
::
TestSession
.
new
(
session
)
unless
session
.
nil?
@request
.
session
[
"flash"
]
=
ActionController
::
Flash
::
FlashHash
.
new
.
update
(
flash
)
if
flash
@controller
.
request
=
@request
@controller
.
params
.
merge!
(
parameters
)
build_request_uri
(
action
,
parameters
)
Base
.
class_eval
{
include
Testing
}
@controller
.
process_with_new_base_test
(
@request
,
@response
)
@response
end
def
xml_http_request
(
request_method
,
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
@request
.
env
[
'HTTP_X_REQUESTED_WITH'
]
=
'XMLHttpRequest'
@request
.
env
[
'HTTP_ACCEPT'
]
||=
[
Mime
::
JS
,
Mime
::
HTML
,
Mime
::
XML
,
'text/xml'
,
Mime
::
ALL
].
join
(
', '
)
returning
__send__
(
request_method
,
action
,
parameters
,
session
,
flash
)
do
@request
.
env
.
delete
'HTTP_X_REQUESTED_WITH'
@request
.
env
.
delete
'HTTP_ACCEPT'
end
end
alias
xhr
:xml_http_request
def
assigns
(
key
=
nil
)
assigns
=
{}
@controller
.
instance_variable_names
.
each
do
|
ivar
|
...
...
@@ -182,16 +41,6 @@ def redirect_to_url
@response
.
redirect_url
end
def
build_request_uri
(
action
,
parameters
)
unless
@request
.
env
[
'REQUEST_URI'
]
options
=
@controller
.
__send__
(
:rewrite_options
,
parameters
)
options
.
update
(
:only_path
=>
true
,
:action
=>
action
)
url
=
ActionController
::
UrlRewriter
.
new
(
@request
,
parameters
)
@request
.
request_uri
=
url
.
rewrite
(
options
)
end
end
def
html_document
xml
=
@response
.
content_type
=~
/xml$/
@html_document
||=
HTML
::
Document
.
new
(
@response
.
body
,
false
,
xml
)
...
...
actionpack/lib/action_controller/testing/test_case.rb
浏览文件 @
542ddde5
require
'active_support/test_case'
require
'
action_controller/testing/process
'
require
'
rack/session/abstract/id
'
module
ActionController
class
TestRequest
<
ActionDispatch
::
TestRequest
#:nodoc:
def
initialize
(
env
=
{})
super
self
.
session
=
TestSession
.
new
self
.
session_options
=
TestSession
::
DEFAULT_OPTIONS
.
merge
(
:id
=>
ActiveSupport
::
SecureRandom
.
hex
(
16
))
end
def
assign_parameters
(
controller_path
,
action
,
parameters
)
parameters
=
parameters
.
symbolize_keys
.
merge
(
:controller
=>
controller_path
,
:action
=>
action
)
extra_keys
=
ActionController
::
Routing
::
Routes
.
extra_keys
(
parameters
)
non_path_parameters
=
get?
?
query_parameters
:
request_parameters
parameters
.
each
do
|
key
,
value
|
if
value
.
is_a?
Fixnum
value
=
value
.
to_s
elsif
value
.
is_a?
Array
value
=
ActionController
::
Routing
::
PathSegment
::
Result
.
new
(
value
)
end
if
extra_keys
.
include?
(
key
.
to_sym
)
non_path_parameters
[
key
]
=
value
else
path_parameters
[
key
.
to_s
]
=
value
end
end
params
=
self
.
request_parameters
.
dup
%w(controller action only_path)
.
each
do
|
k
|
params
.
delete
(
k
)
params
.
delete
(
k
.
to_sym
)
end
data
=
params
.
to_query
@env
[
'CONTENT_LENGTH'
]
=
data
.
length
.
to_s
@env
[
'rack.input'
]
=
StringIO
.
new
(
data
)
end
def
recycle!
@formats
=
nil
@env
.
delete_if
{
|
k
,
v
|
k
=~
/^(action_dispatch|rack)\.request/
}
@env
.
delete_if
{
|
k
,
v
|
k
=~
/^action_dispatch\.rescue/
}
@env
[
'action_dispatch.request.query_parameters'
]
=
{}
end
end
class
TestResponse
<
ActionDispatch
::
TestResponse
def
recycle!
@status
=
200
@header
=
{}
@writer
=
lambda
{
|
x
|
@body
<<
x
}
@block
=
nil
@length
=
0
@body
=
[]
@charset
=
nil
@content_type
=
nil
@request
=
@template
=
nil
end
end
class
TestSession
<
ActionDispatch
::
Session
::
AbstractStore
::
SessionHash
#:nodoc:
DEFAULT_OPTIONS
=
ActionDispatch
::
Session
::
AbstractStore
::
DEFAULT_OPTIONS
def
initialize
(
session
=
{})
replace
(
session
.
stringify_keys
)
@loaded
=
true
end
end
# Superclass for ActionController functional tests. Functional tests allow you to
# test a single controller action per test method. This should not be confused with
# integration tests (see ActionController::IntegrationTest), which are more like
...
...
@@ -105,6 +175,73 @@ module ActionController
class
TestCase
<
ActiveSupport
::
TestCase
include
TestProcess
# Executes a request simulating GET HTTP method and set/volley the response
def
get
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"GET"
)
end
# Executes a request simulating POST HTTP method and set/volley the response
def
post
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"POST"
)
end
# Executes a request simulating PUT HTTP method and set/volley the response
def
put
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"PUT"
)
end
# Executes a request simulating DELETE HTTP method and set/volley the response
def
delete
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"DELETE"
)
end
# Executes a request simulating HEAD HTTP method and set/volley the response
def
head
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
process
(
action
,
parameters
,
session
,
flash
,
"HEAD"
)
end
def
xml_http_request
(
request_method
,
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
)
@request
.
env
[
'HTTP_X_REQUESTED_WITH'
]
=
'XMLHttpRequest'
@request
.
env
[
'HTTP_ACCEPT'
]
||=
[
Mime
::
JS
,
Mime
::
HTML
,
Mime
::
XML
,
'text/xml'
,
Mime
::
ALL
].
join
(
', '
)
returning
__send__
(
request_method
,
action
,
parameters
,
session
,
flash
)
do
@request
.
env
.
delete
'HTTP_X_REQUESTED_WITH'
@request
.
env
.
delete
'HTTP_ACCEPT'
end
end
alias
xhr
:xml_http_request
def
process
(
action
,
parameters
=
nil
,
session
=
nil
,
flash
=
nil
,
http_method
=
'GET'
)
# Sanity check for required instance variables so we can give an
# understandable error message.
%w(@controller @request @response)
.
each
do
|
iv_name
|
if
!
(
instance_variable_names
.
include?
(
iv_name
)
||
instance_variable_names
.
include?
(
iv_name
.
to_sym
))
||
instance_variable_get
(
iv_name
).
nil?
raise
"
#{
iv_name
}
is nil: make sure you set it in your test's setup method."
end
end
@request
.
recycle!
@response
.
recycle!
@controller
.
response_body
=
nil
@controller
.
formats
=
nil
@controller
.
params
=
nil
@html_document
=
nil
@request
.
env
[
'REQUEST_METHOD'
]
=
http_method
parameters
||=
{}
@request
.
assign_parameters
(
@controller
.
class
.
name
.
underscore
.
sub
(
/_controller$/
,
''
),
action
.
to_s
,
parameters
)
@request
.
session
=
ActionController
::
TestSession
.
new
(
session
)
unless
session
.
nil?
@request
.
session
[
"flash"
]
=
ActionController
::
Flash
::
FlashHash
.
new
.
update
(
flash
)
if
flash
@controller
.
request
=
@request
@controller
.
params
.
merge!
(
parameters
)
build_request_uri
(
action
,
parameters
)
Base
.
class_eval
{
include
Testing
}
@controller
.
process_with_new_base_test
(
@request
,
@response
)
@response
end
include
ActionDispatch
::
Assertions
# When the request.remote_addr remains the default for testing, which is 0.0.0.0, the exception is simply raised inline
...
...
@@ -186,5 +323,16 @@ def setup_controller_request_and_response
def
rescue_action_in_public!
@request
.
remote_addr
=
'208.77.188.166'
# example.com
end
private
def
build_request_uri
(
action
,
parameters
)
unless
@request
.
env
[
'REQUEST_URI'
]
options
=
@controller
.
__send__
(
:rewrite_options
,
parameters
)
options
.
update
(
:only_path
=>
true
,
:action
=>
action
)
url
=
ActionController
::
UrlRewriter
.
new
(
@request
,
parameters
)
@request
.
request_uri
=
url
.
rewrite
(
options
)
end
end
end
end
actionpack/test/template/url_helper_test.rb
浏览文件 @
542ddde5
...
...
@@ -5,8 +5,6 @@
RequestMock
=
Struct
.
new
(
"Request"
,
:request_uri
,
:protocol
,
:host_with_port
,
:env
)
class
UrlHelperTest
<
ActionView
::
TestCase
tests
ActionView
::
Helpers
::
UrlHelper
def
setup
super
@controller
=
Class
.
new
do
...
...
@@ -386,9 +384,7 @@ def nil_url_for
def
rescue_action
(
e
)
raise
e
end
end
class
UrlHelperWithControllerTest
<
ActionView
::
TestCase
tests
ActionView
::
Helpers
::
UrlHelper
class
UrlHelperWithControllerTest
<
ActionController
::
TestCase
def
setup
super
@request
=
ActionController
::
TestRequest
.
new
...
...
@@ -463,9 +459,7 @@ def render_default
end
end
class
LinkToUnlessCurrentWithControllerTest
<
ActionView
::
TestCase
tests
ActionView
::
Helpers
::
UrlHelper
class
LinkToUnlessCurrentWithControllerTest
<
ActionController
::
TestCase
def
setup
super
@request
=
ActionController
::
TestRequest
.
new
...
...
@@ -566,9 +560,7 @@ def show
def
rescue_action
(
e
)
raise
e
end
end
class
PolymorphicControllerTest
<
ActionView
::
TestCase
tests
ActionView
::
Helpers
::
UrlHelper
class
PolymorphicControllerTest
<
ActionController
::
TestCase
def
setup
super
@request
=
ActionController
::
TestRequest
.
new
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录