【发布时间】:2016-09-09 03:59:22
【问题描述】:
我正在尝试通过将动态生成的提要与已知输出进行比较来测试 RSS 提要。为了完成这项工作,我需要加载固定时间的固定装置。以下方法可行,但通过重新加载架构和固定装置来重置数据库似乎有点过头了。
# test/integration/feed_test.rb
require 'test_helper'
load 'Rakefile'
class FeedTest < ActionDispatch::IntegrationTest
def setup
# Normalize time in order to match fixture file
travel_to Time.zone.parse('2015-03-01T12:00:00') do
silence_stream(STDOUT) do
# anything written to STDOUT here will be silenced
Rake::Task['db:schema:load'].reenable
Rake::Task['db:schema:load'].invoke
end
Rake::Task['db:fixtures:load'].reenable
Rake::Task['db:fixtures:load'].invoke
end
end
test 'feed matches fixture file' do
get feed_path
assert_equal contents('feed.atom'), response.body
end
end
# test/test_helper.rb
module ActiveSupport
class TestCase
fixtures :all
def contents(file_name)
IO.read "test/fixtures/files/#{file_name}"
end
end
end
我不知道如何仅重新加载 travel_to 块内的项目过滤器。我也无法让travel_to 在test_helper.rb 工作。
但是,这种方法的真正问题是重新加载 Rakefile 会导致 secure_headers gem 发出以下虚假警告:
$ rake test
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:1: warning: already initialized constant INLINE_SCRIPT_REGEX
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:1: warning: previous definition of INLINE_SCRIPT_REGEX was here
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:2: warning: already initialized constant INLINE_STYLE_REGEX
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:2: warning: previous definition of INLINE_STYLE_REGEX was here
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:3: warning: already initialized constant INLINE_HASH_SCRIPT_HELPER_REGEX
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:3: warning: previous definition of INLINE_HASH_SCRIPT_HELPER_REGEX was here
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:4: warning: already initialized constant INLINE_HASH_STYLE_HELPER_REGEX
/Users/dan/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/secure_headers-3.3.1/lib/tasks/tasks.rake:4: warning: previous definition of INLINE_HASH_STYLE_HELPER_REGEX was here
Run options: --seed 17868
# Running:
........................................................................................................
Finished in 17.397614s, 5.9778 runs/s, 191.3481 assertions/s.
104 runs, 3329 assertions, 0 failures, 0 errors, 0 skips
Coverage report generated for MiniTest to /Users/dan/Dropbox/Documents/dev/cii-best-practices-badge/coverage. 754 / 781 LOC (96.54%) covered.
似乎我应该能够在不使用 rake 的情况下重新加载一些固定装置,但我不知道该怎么做。
【问题讨论】:
-
您是否尝试过使用不同版本的 Ruby,可能是 2.3.1 或 2.2.5? Ruby 2.3.0 已被报告为“错误”。
-
不幸的是,事实并非如此。我安装 Ruby 2.3.1 并收到相同的消息。
标签: ruby-on-rails ruby rake minitest fixtures