如何在黄瓜步骤中使用库存最小的固定装置?
说,我有`test / fixtures / users.yml:
harry:
email: harry@hogwards.edu.uk
password: caputdraconis
最小的,这将用于例如@user = users(:harry)
。但它不能用于黄瓜:undefined method 'users' for #<Cucumber::Rails::World:0xaf2cd1c> (NoMethodError)
。
如何在黄瓜中使用灯具及其助手?这首先是一个好主意吗?
答案 0 :(得分:1)
将其放入features/support/env.rb
:
module FixtureAccess
def self.extended(base)
ActiveRecord::FixtureSet.reset_cache
fixtures_folder = File.join(Rails.root, 'test', 'fixtures')
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }
fixtures += Dir[File.join(fixtures_folder, '*.csv')].map {|f| File.basename(f, '.csv') }
ActiveRecord::FixtureSet.create_fixtures(fixtures_folder, fixtures) # This will populate the test database tables
(class << base; self; end).class_eval do
@@fixture_cache = {}
fixtures.each do |table_name|
table_name = table_name.to_s.tr('.', '_')
define_method(table_name) do |*fixture_symbols|
@@fixture_cache[table_name] ||= {}
instances = fixture_symbols.map do |fixture_symbol|
if fix = ActiveRecord::FixtureSet.cached_fixtures(ActiveRecord::Base.connection, table_name).first.fixtures[fixture_symbol.to_s]
@@fixture_cache[table_name][fixture_symbol] ||= fix.find # find model.find's the instance
else
raise StandardError, "No fixture with name '#{fixture_symbol}' found for table '#{table_name}'"
end
end
instances.size == 1 ? instances.first : instances
end
end
end
end
end
World(FixtureAccess)
我的灯具位于test/fixtures
,因为我使用的是Minitest,因此如果您使用的是RSpec,则应更新fixtures_folder
以匹配灯具的位置。
在此之后,您可以执行以下操作:
When(/^a user exists$/) do
users(:harry)
end
在步骤定义中。