Ruby on rails Don';I don’我不知道如何构建任务-黄瓜

Ruby on rails Don';I don’我不知道如何构建任务-黄瓜,ruby-on-rails,tdd,cucumber,rake,Ruby On Rails,Tdd,Cucumber,Rake,在cucumber中,我的种子数据是通过几个rake任务加载的。所有这些都不起作用: Spree::Core::Engine.load_seed if defined?(Spree::Core) Spree::Auth::Engine.load_seed if defined?(Spree::Auth) Rake::Task['alchemy:db:seed'].invoke 当我运行spree的一个rake任务时,我得到: Don't know how to build task 'db:l

在cucumber中,我的种子数据是通过几个rake任务加载的。所有这些都不起作用:

Spree::Core::Engine.load_seed if defined?(Spree::Core)
Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
Rake::Task['alchemy:db:seed'].invoke
当我运行spree的一个rake任务时,我得到:

Don't know how to build task 'db:load_dir' (RuntimeError)
Don't know how to build task 'alchemy:db:seed' (RuntimeError)
当我运行炼金术的一个耙子任务时,我得到:

Don't know how to build task 'db:load_dir' (RuntimeError)
Don't know how to build task 'alchemy:db:seed' (RuntimeError)
测试数据库已存在。我已经运行了
rake db:test:prepare
,它似乎是从我的检查中设置的。让我们转到挂钩上:

# features/support/hooks.rb
Before do
  load File.join(Rails.root, 'db', 'seeds.rb')
end
这将转到根目录并获取种子数据。我决定试试这个:

# features/support/hooks.rb
before do
  # load File.join(Rails.root, 'db', 'seeds.rb')
  Rake::Task['alchemy:db:seed'].invoke
end
错误是:

Don't know how to build task 'alchemy:db:seed' (RuntimeError)
我无法理解为什么rake任务在cucumber中不起作用

我的档案如下:

source 'https://rubygems.org'
ruby '2.1.2'

gem 'rails', '4.0.6'

gem 'pg'
gem 'redis-rails'
gem 'redis-rack-cache'

gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'

gem 'thin'
gem 'durable_decorator_rails', github: 'jumph4x/durable_decorator_rails'
gem 'newrelic_rpm'
gem 'rake'

gem 'spree', '2.2.2'
gem 'spree_gateway', github: 'spree/spree_gateway', branch: '2-2-stable'
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '2-2-stable'
gem 'spree_bootstrap_frontend', github: '200Creative/spree_bootstrap_frontend', branch: '2-2-stable'

gem 'alchemy_cms', github: 'magiclabs/alchemy_cms'
gem 'spree_alchemy', github: 'tesserakt/spree_alchemy'

group :doc do
  gem 'sdoc', '~> 0.4.0'
end

group :development do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'meta_request'
end

group :test do
  gem 'simplecov', require: false
  gem 'cucumber-rails', require: false
  gem "cucumber-websteps"
  gem 'database_cleaner'
  gem "selenium-webdriver"
  gem "capybara-webkit"
end

group :development, :test do
  gem "factory_girl_rails", "~> 4.0"
  gem "rspec-rails"
  gem 'rspec-its'
  gem 'shoulda-matchers', require: false
end
这是我的环境支持文件:

# features/support/env.rb
require 'cucumber/rails'

ActionController::Base.allow_rescue = false

begin
  DatabaseCleaner.strategy = :transaction
rescue NameError
  raise 'You need to add database_cleaner to your' \
   'Gemfile (in the :test group) if you wish to use it.'
end

Cucumber::Rails::Database.javascript_strategy = :truncation

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.javascript_driver = :chrome

似乎缺少测试数据库。因此,正如上面的注释中所述,解决方案是创建数据库并使用

RAILS_ENV=test rake db:setup

很乐意提供帮助:)

默认情况下,Rake不会加载任务,您可以自己检查:

irb(main):002:0> require 'rake'
=> true
irb(main):003:0> Rake::Task.tasks
=> []
所以它不知道如何运行您的任务。您需要告诉Rails加载它们:

Rails.application.load\u任务
Spree::Core::Engine.load_seed(如果已定义)(Spree::Core)
Spree::Auth::Engine.load_seed(如果已定义)(Spree::Auth)

您正在运行哪个Rails版本?rake任务
db:test:prepare
来自哪里?这不是标准的Rails任务。所以我会仔细检查测试数据库是否真的存在。您可以尝试
RAILS\u ENV=test rake db:setup
,看看输出是什么。正在尝试您的建议。@awenkhh您的编辑导致main:Object的
未定义方法'before'。将切换回。@awenkhh如果您可以写下
RAILS\u ENV=test rake db:setup
是解决方案,我会给您分数;)哦,酷-我创造了答案:)。关于我的编辑-我真的不知道为什么更正的拼写会破坏测试。无论如何,很抱歉。。。