Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
2b594b06
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,发现更多精彩内容 >>
未验证
提交
2b594b06
编写于
8月 20, 2018
作者:
J
Jeremy Daer
提交者:
GitHub
8月 20, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #33635 from bogdanvlviv/improve-active_job-test_helpers
Improve Active Job test helpers
上级
96cd16bd
b8576425
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
726 addition
and
61 deletion
+726
-61
activejob/CHANGELOG.md
activejob/CHANGELOG.md
+13
-13
activejob/lib/active_job/queue_adapters/test_adapter.rb
activejob/lib/active_job/queue_adapters/test_adapter.rb
+11
-3
activejob/lib/active_job/test_helper.rb
activejob/lib/active_job/test_helper.rb
+114
-33
activejob/test/cases/test_helper_test.rb
activejob/test/cases/test_helper_test.rb
+588
-12
未找到文件。
activejob/CHANGELOG.md
浏览文件 @
2b594b06
*
Allow
`assert_performed_with`
to be called without a block.
*bogdanvlviv*
*
Execution of
`assert_performed_jobs`
, and
`assert_no_performed_jobs`
without a block should respect passed
`:except`
,
`:only`
, and
`:queue`
options.
*bogdanvlviv*
*
Allow
`:queue`
option to job assertions and helpers.
*bogdanvlviv*
*
Allow
`perform_enqueued_jobs`
to be called without a block.
Performs all of the jobs that have been enqueued up to this point in the test.
...
...
@@ -11,19 +24,6 @@
*Zach Kemp*
*
Allow
`queue`
option to
`assert_no_enqueued_jobs`
.
Example:
```
def test_no_logging
assert_no_enqueued_jobs queue: 'default' do
LoggingJob.set(queue: :some_queue).perform_later
end
end
```
*bogdanvlviv*
*
Allow call
`assert_enqueued_with`
with no block.
Example:
...
...
activejob/lib/active_job/queue_adapters/test_adapter.rb
浏览文件 @
2b594b06
...
...
@@ -12,7 +12,7 @@ module QueueAdapters
#
# Rails.application.config.active_job.queue_adapter = :test
class
TestAdapter
attr_accessor
(
:perform_enqueued_jobs
,
:perform_enqueued_at_jobs
,
:filter
,
:reject
)
attr_accessor
(
:perform_enqueued_jobs
,
:perform_enqueued_at_jobs
,
:filter
,
:reject
,
:queue
)
attr_writer
(
:enqueued_jobs
,
:performed_jobs
)
# Provides a store of all the enqueued jobs with the TestAdapter so you can check them.
...
...
@@ -54,12 +54,20 @@ def perform_or_enqueue(perform, job, job_data)
end
def
filtered?
(
job
)
filtered_queue?
(
job
)
||
filtered_job_class?
(
job
)
end
def
filtered_queue?
(
job
)
if
queue
job
.
queue_name
!=
queue
.
to_s
end
end
def
filtered_job_class?
(
job
)
if
filter
!
Array
(
filter
).
include?
(
job
.
class
)
elsif
reject
Array
(
reject
).
include?
(
job
.
class
)
else
false
end
end
end
...
...
activejob/lib/active_job/test_helper.rb
浏览文件 @
2b594b06
...
...
@@ -52,7 +52,7 @@ def after_teardown # :nodoc:
queue_adapter_changed_jobs
.
each
{
|
klass
|
klass
.
disable_test_adapter
}
end
# Specifies the queue adapter to use with all
active j
ob test helpers.
# Specifies the queue adapter to use with all
Active J
ob test helpers.
#
# Returns an instance of the queue adapter and defaults to
# <tt>ActiveJob::QueueAdapters::TestAdapter</tt>.
...
...
@@ -118,13 +118,17 @@ def queue_adapter_for_test
def
assert_enqueued_jobs
(
number
,
only:
nil
,
except:
nil
,
queue:
nil
)
if
block_given?
original_count
=
enqueued_jobs_with
(
only:
only
,
except:
except
,
queue:
queue
)
yield
new_count
=
enqueued_jobs_with
(
only:
only
,
except:
except
,
queue:
queue
)
assert_equal
number
,
new_count
-
original_count
,
"
#{
number
}
jobs expected, but
#{
new_count
-
original_count
}
were enqueued"
actual_count
=
new_count
-
original_count
else
actual_count
=
enqueued_jobs_with
(
only:
only
,
except:
except
,
queue:
queue
)
assert_equal
number
,
actual_count
,
"
#{
number
}
jobs expected, but
#{
actual_count
}
were enqueued"
end
assert_equal
number
,
actual_count
,
"
#{
number
}
jobs expected, but
#{
actual_count
}
were enqueued"
end
# Asserts that no jobs have been enqueued.
...
...
@@ -176,7 +180,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# Asserts that the number of performed jobs matches the given number.
# If no block is passed, <tt>perform_enqueued_jobs</tt>
# must be called around the job call.
# must be called around
or after
the job call.
#
# def test_jobs
# assert_performed_jobs 0
...
...
@@ -186,10 +190,11 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# assert_performed_jobs 1
#
# perform_enqueued_jobs do
# HelloJob.perform_later('yves')
# assert_performed_jobs 2
# end
# HelloJob.perform_later('yves')
#
# perform_enqueued_jobs
#
# assert_performed_jobs 2
# end
#
# If a block is passed, that block should cause the specified number of
...
...
@@ -206,7 +211,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
#
# Th
e block form supports filtering. If the :only
option is specified,
# Th
is method also supports filtering. If the +:only+
option is specified,
# then only the listed job(s) will be performed.
#
# def test_hello_job
...
...
@@ -216,7 +221,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
#
# Also if the
:except
option is specified,
# Also if the
+:except+
option is specified,
# then the job(s) except specific class will be performed.
#
# def test_hello_job
...
...
@@ -237,17 +242,30 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
# end
def
assert_performed_jobs
(
number
,
only:
nil
,
except:
nil
)
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will be performed.
#
# def test_assert_performed_jobs_with_queue_option
# assert_performed_jobs 1, queue: :some_queue do
# HelloJob.set(queue: :some_queue).perform_later("jeremy")
# HelloJob.set(queue: :other_queue).perform_later("bogdan")
# end
# end
def
assert_performed_jobs
(
number
,
only:
nil
,
except:
nil
,
queue:
nil
,
&
block
)
if
block_given?
original_count
=
performed_jobs
.
size
perform_enqueued_jobs
(
only:
only
,
except:
except
)
{
yield
}
perform_enqueued_jobs
(
only:
only
,
except:
except
,
queue:
queue
,
&
block
)
new_count
=
performed_jobs
.
size
assert_equal
number
,
new_count
-
original_count
,
"
#{
number
}
jobs expected, but
#{
new_count
-
original_count
}
were performed"
performed_jobs_size
=
new_count
-
original_count
else
performed_jobs_size
=
performed_jobs
.
size
assert_equal
number
,
performed_jobs_size
,
"
#{
number
}
jobs expected, but
#{
performed_jobs_size
}
were performed"
performed_jobs_size
=
performed_jobs_with
(
only:
only
,
except:
except
,
queue:
queue
)
end
assert_equal
number
,
performed_jobs_size
,
"
#{
number
}
jobs expected, but
#{
performed_jobs_size
}
were performed"
end
# Asserts that no jobs have been performed.
...
...
@@ -269,7 +287,7 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# The block form supports filtering. If the
:only
option is specified,
# The block form supports filtering. If the
+:only+
option is specified,
# then only the listed job(s) will not be performed.
#
# def test_no_logging
...
...
@@ -278,7 +296,7 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# Also if the
:except
option is specified,
# Also if the
+:except+
option is specified,
# then the job(s) except specific class will not be performed.
#
# def test_no_logging
...
...
@@ -287,11 +305,20 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will not be performed.
#
# def test_assert_no_performed_jobs_with_queue_option
# assert_no_performed_jobs queue: :some_queue do
# HelloJob.set(queue: :other_queue).perform_later("jeremy")
# end
# end
#
# Note: This assertion is simply a shortcut for:
#
# assert_performed_jobs 0, &block
def
assert_no_performed_jobs
(
only:
nil
,
except:
nil
,
&
block
)
assert_performed_jobs
0
,
only:
only
,
except:
except
,
&
block
def
assert_no_performed_jobs
(
only:
nil
,
except:
nil
,
queue:
nil
,
&
block
)
assert_performed_jobs
0
,
only:
only
,
except:
except
,
queue:
queue
,
&
block
end
# Asserts that the job has been enqueued with the given arguments.
...
...
@@ -338,7 +365,25 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
instantiate_job
(
matching_job
)
end
# Asserts that the job passed in the block has been performed with the given arguments.
# Asserts that the job has been performed with the given arguments.
#
# def test_assert_performed_with
# MyJob.perform_later(1,2,3)
#
# perform_enqueued_jobs
#
# assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high')
#
# MyJob.set(wait_until: Date.tomorrow.noon).perform_later
#
# perform_enqueued_jobs
#
# assert_performed_with(job: MyJob, at: Date.tomorrow.noon)
# end
#
# If a block is passed, that block performs all of the jobs that were
# enqueued throughout the duration of the block and asserts that
# the job has been performed with the given arguments in the block.
#
# def test_assert_performed_with
# assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high') do
...
...
@@ -349,15 +394,24 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
# MyJob.set(wait_until: Date.tomorrow.noon).perform_later
# end
# end
def
assert_performed_with
(
job:
nil
,
args:
nil
,
at:
nil
,
queue:
nil
)
original_performed_jobs_count
=
performed_jobs
.
count
def
assert_performed_with
(
job:
nil
,
args:
nil
,
at:
nil
,
queue:
nil
,
&
block
)
expected
=
{
job:
job
,
args:
args
,
at:
at
,
queue:
queue
}.
compact
serialized_args
=
serialize_args_for_assertion
(
expected
)
perform_enqueued_jobs
{
yield
}
in_block_jobs
=
performed_jobs
.
drop
(
original_performed_jobs_count
)
matching_job
=
in_block_jobs
.
find
do
|
in_block_job
|
serialized_args
.
all?
{
|
key
,
value
|
value
==
in_block_job
[
key
]
}
if
block_given?
original_performed_jobs_count
=
performed_jobs
.
count
perform_enqueued_jobs
(
&
block
)
jobs
=
performed_jobs
.
drop
(
original_performed_jobs_count
)
else
jobs
=
performed_jobs
end
matching_job
=
jobs
.
find
do
|
performed_job
|
serialized_args
.
all?
{
|
key
,
value
|
value
==
performed_job
[
key
]
}
end
assert
matching_job
,
"No performed job found with
#{
expected
}
"
instantiate_job
(
matching_job
)
end
...
...
@@ -403,25 +457,42 @@ def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
# assert_performed_jobs 1
# end
#
def
perform_enqueued_jobs
(
only:
nil
,
except:
nil
)
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will be performed.
#
# def test_perform_enqueued_jobs_with_queue
# perform_enqueued_jobs queue: :some_queue do
# MyJob.set(queue: :some_queue).perform_later(1, 2, 3) # will be performed
# HelloJob.set(queue: :other_queue).perform_later(1, 2, 3) # will not be performed
# end
# assert_performed_jobs 1
# end
#
def
perform_enqueued_jobs
(
only:
nil
,
except:
nil
,
queue:
nil
)
return
flush_enqueued_jobs
(
only:
only
,
except:
except
,
queue:
queue
)
unless
block_given?
validate_option
(
only:
only
,
except:
except
)
old_perform_enqueued_jobs
=
queue_adapter
.
perform_enqueued_jobs
old_perform_enqueued_at_jobs
=
queue_adapter
.
perform_enqueued_at_jobs
old_filter
=
queue_adapter
.
filter
old_reject
=
queue_adapter
.
reject
old_queue
=
queue_adapter
.
queue
begin
queue_adapter
.
perform_enqueued_jobs
=
true
queue_adapter
.
perform_enqueued_at_jobs
=
true
queue_adapter
.
filter
=
only
queue_adapter
.
reject
=
except
queue_adapter
.
queue
=
queue
block_given?
?
yield
:
flush_enqueued_jobs
(
only:
only
,
except:
except
)
yield
ensure
queue_adapter
.
perform_enqueued_jobs
=
old_perform_enqueued_jobs
queue_adapter
.
perform_enqueued_at_jobs
=
old_perform_enqueued_at_jobs
queue_adapter
.
filter
=
old_filter
queue_adapter
.
reject
=
old_reject
queue_adapter
.
queue
=
old_queue
end
end
...
...
@@ -443,10 +514,10 @@ def clear_performed_jobs
performed_jobs
.
clear
end
def
enqueued_jobs_with
(
only:
nil
,
except:
nil
,
queue:
nil
)
def
jobs_with
(
jobs
,
only:
nil
,
except:
nil
,
queue:
nil
)
validate_option
(
only:
only
,
except:
except
)
enqueued_
jobs
.
count
do
|
job
|
jobs
.
count
do
|
job
|
job_class
=
job
.
fetch
(
:job
)
if
only
...
...
@@ -454,17 +525,27 @@ def enqueued_jobs_with(only: nil, except: nil, queue: nil)
elsif
except
next
false
if
Array
(
except
).
include?
(
job_class
)
end
if
queue
next
false
unless
queue
.
to_s
==
job
.
fetch
(
:queue
,
job_class
.
queue_name
)
end
yield
job
if
block_given?
true
end
end
def
flush_enqueued_jobs
(
only:
nil
,
except:
nil
)
enqueued_jobs_with
(
only:
only
,
except:
except
)
do
|
payload
|
def
enqueued_jobs_with
(
only:
nil
,
except:
nil
,
queue:
nil
,
&
block
)
jobs_with
(
enqueued_jobs
,
only:
only
,
except:
except
,
queue:
queue
,
&
block
)
end
def
performed_jobs_with
(
only:
nil
,
except:
nil
,
queue:
nil
,
&
block
)
jobs_with
(
performed_jobs
,
only:
only
,
except:
except
,
queue:
queue
,
&
block
)
end
def
flush_enqueued_jobs
(
only:
nil
,
except:
nil
,
queue:
nil
)
enqueued_jobs_with
(
only:
only
,
except:
except
,
queue:
queue
)
do
|
payload
|
args
=
ActiveJob
::
Arguments
.
deserialize
(
payload
[
:args
])
instantiate_job
(
payload
.
merge
(
args:
args
)).
perform_now
queue_adapter
.
performed_jobs
<<
payload
...
...
activejob/test/cases/test_helper_test.rb
浏览文件 @
2b594b06
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录