gpt4 book ai didi

ruby-on-rails - 如何在 Cucumber 步骤中使用 minitest fixture ?

转载 作者:行者123 更新时间:2023-12-02 06:12:37 25 4
gpt4 key购买 nike

如何在 Cucumber 步骤中使用 Stock Minitest 附带的装置?

比如说,我有`test/fixtures/users.yml:

harry:
email: harry@hogwards.edu.uk
password: caputdraconis

在 minitest 中,这将用于例如@user = users(:harry) 。但它不能在 Cucumber 中使用:undefined method 'users' for #<Cucumber::Rails::World:0xaf2cd1c> (NoMethodError) .

如何在 Cucumber 中提供灯具及其助手?首先这是一个好主意吗?

最佳答案

将其放入您的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)

由于我使用的是 Minitest,因此我的灯具位于 test/fixtures 中,因此如果您使用的是 Minitest,则应更新您的 fixtures_folder 以匹配灯具的位置R规范。

之后您可以执行以下操作:

When(/^a user exists$/) do
users(:harry)
end

在您的步骤定义中。

关于ruby-on-rails - 如何在 Cucumber 步骤中使用 minitest fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com