Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
47ab6b36
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,发现更多精彩内容 >>
未验证
提交
47ab6b36
编写于
11月 21, 2018
作者:
R
Rafael França
提交者:
GitHub
11月 21, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #34339 from Edouard-chin/ec-mail-test-helper
Fix ActionMailer assertion not working for mail defining delivery_job:
上级
ca033921
e139a3ce
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
171 addition
and
9 deletion
+171
-9
actionmailer/CHANGELOG.md
actionmailer/CHANGELOG.md
+5
-0
actionmailer/lib/action_mailer/test_helper.rb
actionmailer/lib/action_mailer/test_helper.rb
+14
-5
actionmailer/test/test_helper_test.rb
actionmailer/test/test_helper_test.rb
+51
-0
activejob/CHANGELOG.md
activejob/CHANGELOG.md
+5
-0
activejob/lib/active_job/queue_adapters/test_adapter.rb
activejob/lib/active_job/queue_adapters/test_adapter.rb
+8
-2
activejob/lib/active_job/test_helper.rb
activejob/lib/active_job/test_helper.rb
+32
-2
activejob/test/cases/test_helper_test.rb
activejob/test/cases/test_helper_test.rb
+56
-0
未找到文件。
actionmailer/CHANGELOG.md
浏览文件 @
47ab6b36
*
Fix ActionMailer assertions not working when a Mail defines
a custom delivery job class
*Edouard Chin*
*
Mails with multipart
`format`
blocks with implicit render now also check for
a template name in options hash instead of only using the action name.
...
...
actionmailer/lib/action_mailer/test_helper.rb
浏览文件 @
47ab6b36
...
...
@@ -34,7 +34,7 @@ module TestHelper
def
assert_emails
(
number
,
&
block
)
if
block_given?
original_count
=
ActionMailer
::
Base
.
deliveries
.
size
perform_enqueued_jobs
(
only:
[
ActionMailer
::
DeliveryJob
,
ActionMailer
::
Parameterized
::
DeliveryJob
]
,
&
block
)
perform_enqueued_jobs
(
only:
->
(
job
)
{
delivery_job_filter
(
job
)
}
,
&
block
)
new_count
=
ActionMailer
::
Base
.
deliveries
.
size
assert_equal
number
,
new_count
-
original_count
,
"
#{
number
}
emails expected, but
#{
new_count
-
original_count
}
were sent"
else
...
...
@@ -90,7 +90,7 @@ def assert_no_emails(&block)
# end
# end
def
assert_enqueued_emails
(
number
,
&
block
)
assert_enqueued_jobs
number
,
only:
[
ActionMailer
::
DeliveryJob
,
ActionMailer
::
Parameterized
::
DeliveryJob
],
&
block
assert_enqueued_jobs
(
number
,
only:
->
(
job
)
{
delivery_job_filter
(
job
)
},
&
block
)
end
# Asserts that a specific email has been enqueued, optionally
...
...
@@ -125,10 +125,10 @@ def assert_enqueued_emails(number, &block)
# end
def
assert_enqueued_email_with
(
mailer
,
method
,
args:
nil
,
queue:
"mailers"
,
&
block
)
if
args
.
is_a?
Hash
job
=
ActionMailer
::
Parameterized
::
DeliveryJ
ob
job
=
mailer
.
parameterized_delivery_j
ob
args
=
[
mailer
.
to_s
,
method
.
to_s
,
"deliver_now"
,
args
]
else
job
=
ActionMailer
::
DeliveryJ
ob
job
=
mailer
.
delivery_j
ob
args
=
[
mailer
.
to_s
,
method
.
to_s
,
"deliver_now"
,
*
args
]
end
...
...
@@ -151,7 +151,16 @@ def assert_enqueued_email_with(mailer, method, args: nil, queue: "mailers", &blo
# end
# end
def
assert_no_enqueued_emails
(
&
block
)
assert_
no_enqueued_jobs
only:
[
ActionMailer
::
DeliveryJob
,
ActionMailer
::
Parameterized
::
DeliveryJob
]
,
&
block
assert_
enqueued_emails
0
,
&
block
end
private
def
delivery_job_filter
(
job
)
job_class
=
job
.
is_a?
(
Hash
)
?
job
.
fetch
(
:job
)
:
job
.
class
Base
.
descendants
.
map
(
&
:delivery_job
).
include?
(
job_class
)
||
Base
.
descendants
.
map
(
&
:parameterized_delivery_job
).
include?
(
job_class
)
end
end
end
actionmailer/test/test_helper_test.rb
浏览文件 @
47ab6b36
...
...
@@ -24,6 +24,17 @@ def test_parameter_args
end
end
class
CustomDeliveryJob
<
ActionMailer
::
DeliveryJob
end
class
CustomParameterizedDeliveryJob
<
ActionMailer
::
Parameterized
::
DeliveryJob
end
class
CustomDeliveryMailer
<
TestHelperMailer
self
.
delivery_job
=
CustomDeliveryJob
self
.
parameterized_delivery_job
=
CustomParameterizedDeliveryJob
end
class
TestHelperMailerTest
<
ActionMailer
::
TestCase
include
ActiveSupport
::
Testing
::
Stream
...
...
@@ -69,6 +80,26 @@ def test_assert_emails
end
end
def
test_assert_emails_with_custom_delivery_job
assert_nothing_raised
do
assert_emails
(
1
)
do
silence_stream
(
$stdout
)
do
CustomDeliveryMailer
.
test
.
deliver_later
end
end
end
end
def
test_assert_emails_with_custom_parameterized_delivery_job
assert_nothing_raised
do
assert_emails
(
1
)
do
silence_stream
(
$stdout
)
do
CustomDeliveryMailer
.
with
(
foo:
"bar"
).
test_parameter_args
.
deliver_later
end
end
end
end
def
test_assert_emails_with_enqueued_emails
assert_nothing_raised
do
assert_emails
1
do
...
...
@@ -201,6 +232,16 @@ def test_assert_enqueued_emails_too_few_sent
assert_match
(
/2 .* but 1/
,
error
.
message
)
end
def
test_assert_enqueued_emails_with_custom_delivery_job
assert_nothing_raised
do
assert_enqueued_emails
(
1
)
do
silence_stream
(
$stdout
)
do
CustomDeliveryMailer
.
test
.
deliver_later
end
end
end
end
def
test_assert_enqueued_emails_too_many_sent
error
=
assert_raise
ActiveSupport
::
TestCase
::
Assertion
do
assert_enqueued_emails
1
do
...
...
@@ -252,6 +293,16 @@ def test_assert_enqueued_email_with
end
end
def
test_assert_enqueued_email_with_when_mailer_has_custom_delivery_job
assert_nothing_raised
do
assert_enqueued_email_with
CustomDeliveryMailer
,
:test
do
silence_stream
(
$stdout
)
do
CustomDeliveryMailer
.
test
.
deliver_later
end
end
end
end
def
test_assert_enqueued_email_with_with_no_block
assert_nothing_raised
do
silence_stream
(
$stdout
)
do
...
...
activejob/CHANGELOG.md
浏览文件 @
47ab6b36
*
Allow all assertion helpers that have a
`only`
and
`except`
keyword to accept
Procs.
*Edouard Chin*
*
Restore HashWithIndifferentAccess support to ActiveJob::Arguments.deserialize.
*Gannon McGibbon*
...
...
activejob/lib/active_job/queue_adapters/test_adapter.rb
浏览文件 @
47ab6b36
...
...
@@ -65,11 +65,17 @@ def filtered_queue?(job)
def
filtered_job_class?
(
job
)
if
filter
!
Array
(
filter
).
include?
(
job
.
class
)
!
filter_as_proc
(
filter
).
call
(
job
)
elsif
reject
Array
(
reject
).
include?
(
job
.
class
)
filter_as_proc
(
reject
).
call
(
job
)
end
end
def
filter_as_proc
(
filter
)
return
filter
if
filter
.
is_a?
(
Proc
)
->
(
job
)
{
Array
(
filter
).
include?
(
job
.
class
)
}
end
end
end
end
activejob/lib/active_job/test_helper.rb
浏览文件 @
47ab6b36
...
...
@@ -107,6 +107,9 @@ def queue_adapter_for_test
# end
# end
#
# +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
# a hash containing the job's class and it's argument are passed as argument.
#
# Asserts the number of times a job is enqueued to a specific queue by passing +:queue+ option.
#
# def test_logging_job
...
...
@@ -163,6 +166,9 @@ def assert_enqueued_jobs(number, only: nil, except: nil, queue: nil)
# end
# end
#
# +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
# a hash containing the job's class and it's argument are passed as argument.
#
# Asserts that no jobs are enqueued to a specific queue by passing +:queue+ option
#
# def test_no_logging
...
...
@@ -243,6 +249,18 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
#
# A proc may also be specified. When passed a Proc, the job's instance will be passed as argument.
#
# def test_hello_and_logging_jobs
# assert_nothing_raised do
# assert_performed_jobs(1, only: ->(job) { job.is_a?(HelloJob) }) do
# HelloJob.perform_later('jeremy')
# LoggingJob.perform_later('stewie')
# RescueJob.perform_later('david')
# end
# end
# end
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will be performed.
#
...
...
@@ -305,6 +323,9 @@ def assert_performed_jobs(number, only: nil, except: nil, queue: nil, &block)
# end
# end
#
# +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
# an instance of the job will be passed as argument.
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will not be performed.
#
...
...
@@ -505,6 +526,9 @@ def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block)
# assert_performed_jobs 1
# end
#
# +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
# an instance of the job will be passed as argument.
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will be performed.
#
...
...
@@ -569,9 +593,9 @@ def jobs_with(jobs, only: nil, except: nil, queue: nil)
job_class
=
job
.
fetch
(
:job
)
if
only
next
false
unless
Array
(
only
).
include?
(
job_class
)
next
false
unless
filter_as_proc
(
only
).
call
(
job
)
elsif
except
next
false
if
Array
(
except
).
include?
(
job_class
)
next
false
if
filter_as_proc
(
except
).
call
(
job
)
end
if
queue
...
...
@@ -584,6 +608,12 @@ def jobs_with(jobs, only: nil, except: nil, queue: nil)
end
end
def
filter_as_proc
(
filter
)
return
filter
if
filter
.
is_a?
(
Proc
)
->
(
job
)
{
Array
(
filter
).
include?
(
job
.
fetch
(
:job
))
}
end
def
enqueued_jobs_with
(
only:
nil
,
except:
nil
,
queue:
nil
,
&
block
)
jobs_with
(
enqueued_jobs
,
only:
only
,
except:
except
,
queue:
queue
,
&
block
)
end
...
...
activejob/test/cases/test_helper_test.rb
浏览文件 @
47ab6b36
...
...
@@ -114,6 +114,16 @@ def test_assert_enqueued_jobs_with_only_option
end
end
def
test_assert_enqueued_jobs_with_only_option_as_proc
assert_nothing_raised
do
assert_enqueued_jobs
(
1
,
only:
->
(
job
)
{
job
.
fetch
(
:job
).
name
==
"HelloJob"
})
do
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
LoggingJob
.
perform_later
end
end
end
def
test_assert_enqueued_jobs_with_except_option
assert_nothing_raised
do
assert_enqueued_jobs
1
,
except:
LoggingJob
do
...
...
@@ -124,6 +134,16 @@ def test_assert_enqueued_jobs_with_except_option
end
end
def
test_assert_enqueued_jobs_with_except_option_as_proc
assert_nothing_raised
do
assert_enqueued_jobs
(
1
,
except:
->
(
job
)
{
job
.
fetch
(
:job
).
name
==
"LoggingJob"
})
do
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
LoggingJob
.
perform_later
end
end
end
def
test_assert_enqueued_jobs_with_only_and_except_option
error
=
assert_raise
ArgumentError
do
assert_enqueued_jobs
1
,
only:
HelloJob
,
except:
HelloJob
do
...
...
@@ -911,6 +931,15 @@ def test_assert_performed_jobs_with_only_option
end
end
def
test_assert_performed_jobs_with_only_option_as_proc
assert_nothing_raised
do
assert_performed_jobs
(
1
,
only:
->
(
job
)
{
job
.
is_a?
(
HelloJob
)
})
do
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
end
end
end
def
test_assert_performed_jobs_without_block_with_only_option
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
...
...
@@ -920,6 +949,15 @@ def test_assert_performed_jobs_without_block_with_only_option
assert_performed_jobs
1
,
only:
HelloJob
end
def
test_assert_performed_jobs_without_block_with_only_option_as_proc
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
perform_enqueued_jobs
assert_performed_jobs
(
1
,
only:
->
(
job
)
{
job
.
fetch
(
:job
).
name
==
"HelloJob"
})
end
def
test_assert_performed_jobs_without_block_with_only_option_failure
LoggingJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
...
...
@@ -942,6 +980,15 @@ def test_assert_performed_jobs_with_except_option
end
end
def
test_assert_performed_jobs_with_except_option_as_proc
assert_nothing_raised
do
assert_performed_jobs
(
1
,
except:
->
(
job
)
{
job
.
is_a?
(
HelloJob
)
})
do
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
end
end
end
def
test_assert_performed_jobs_without_block_with_except_option
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
...
...
@@ -951,6 +998,15 @@ def test_assert_performed_jobs_without_block_with_except_option
assert_performed_jobs
1
,
except:
HelloJob
end
def
test_assert_performed_jobs_without_block_with_except_option_as_proc
HelloJob
.
perform_later
(
"jeremy"
)
LoggingJob
.
perform_later
(
"bogdan"
)
perform_enqueued_jobs
assert_performed_jobs
(
1
,
except:
->
(
job
)
{
job
.
fetch
(
:job
).
name
==
"HelloJob"
})
end
def
test_assert_performed_jobs_without_block_with_except_option_failure
HelloJob
.
perform_later
(
"jeremy"
)
HelloJob
.
perform_later
(
"bogdan"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录