Ruby 如何为测试套件运行迁移。

Ruby 如何为测试套件运行迁移。,ruby,activerecord,rspec,Ruby,Activerecord,Rspec,我有一个使用ActiveRecord和sqllite的ruby应用程序。我正在尝试编写测试,但出现以下错误: Failure/Error: user = described_class.create(name: name) ActiveRecord::StatementInvalid: Could not find table 'users' 这是我的档案: source "https://rubygems.org" gem "sinatra-activereco

我有一个使用ActiveRecord和sqllite的ruby应用程序。我正在尝试编写测试,但出现以下错误:

 Failure/Error: user = described_class.create(name: name)

     ActiveRecord::StatementInvalid:
       Could not find table 'users'
这是我的档案:

source "https://rubygems.org"

gem "sinatra-activerecord"
gem "sqlite3"

group :test do
  gem 'database_cleaner'
end

group :test, :development do
  gem "rspec-rails", ">= 2.1.0"
  gem "pry"
end
我有一个spec_助手,看起来像这样:

RSpec.configure do |config|


  ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: 'db/test.db')
end

如何创建测试数据库并为sqllite测试运行迁移?

bin/rails\u ENV=test db:migrate
和/或
bin/rails db:test:prepare
将更新测试数据库。你可能还想看看那里有太多有用的信息。或者,如果您想避免使用固定装置,它非常适合生成测试数据。

bin/rails\u ENV=test db:migrate
和/或
bin/rails db:test:prepare
将更新您的测试数据库。你可能还想看看那里有太多有用的信息。或者,如果你想避免固定,对于生成测试数据是很好的。

< P>金妮的回答是可行的,但是如果像肖恩提到的那样,你需要一个ActurCordRod的解决方案,而不是使用Rails。 我最近开发了一个gem来捆绑一些ActiveRecord模型,而不使用Rails。 下面是我用rspec测试模型的步骤:

spec/spec\u helper.rb:

ActiveRecord::Base.establish_connection(adapter: 'sqlite3',
                                        database: ':memory:')
ActiveRecord::Schema.define do
  require_relative '../lib/db/migrate/create_models'
end
lib/db/migrate/create_models.rb:(要创建此文件,我复制/粘贴了迁移生成的实际schema.rb)

class CreateModels
这将创建测试运行所需的表


<>不要忘记在你的** SPEC.RB文件中要求SuffelHelp,你可以去。

GnNe的回答可以起作用,但是如果提到肖恩,你只需要一个ActurCordRod的解决方案而不是使用Rails,考虑一下这个:

我最近开发了一个gem来捆绑一些ActiveRecord模型,而不使用Rails。 下面是我用rspec测试模型的步骤:

spec/spec\u helper.rb:

ActiveRecord::Base.establish_connection(adapter: 'sqlite3',
                                        database: ':memory:')
ActiveRecord::Schema.define do
  require_relative '../lib/db/migrate/create_models'
end
lib/db/migrate/create_models.rb:(要创建此文件,我复制/粘贴了迁移生成的实际schema.rb)

class CreateModels
这将创建测试运行所需的表


别忘了在*\u spec.rb文件中需要spec\u helper,你就可以开始了。

Ginnie在这里的回答很完美,只是OP没有指定应用程序使用Rails。ActiveRecord任务/迁移是一个很好的解决问题的方法,可以在Rails之外完成(尽管它需要一些额外的修补)。将
rails
放入
Gemfile
以获得一个简单的解决方案,或者通读迁移指南以更好地理解api:很好,Sean Huber,我没有注意到sinatra gem。我不怎么用辛纳屈。“rspec-rails”gem会与Sinatra一起工作吗?从rspec-rails中列出的运行时依赖关系中,我看到了activesupport、actionpack和railties的运行时依赖关系。我相信您可以只使用sinatra和这些rails组件建立一个项目,并让rspec rails+活动记录迁移工作。但在我看来,如果你把所有这些rails的精华都带进来,你最好在rails之上构建你的应用程序,而不是自己拼凑起来。好问题。另外,
db:test:prepare
4.1
中被弃用,并且已经被完全删除。除了OP没有指定应用程序使用Rails之外,这里的答案是完美的。ActiveRecord任务/迁移是一个很好的解决问题的方法,可以在Rails之外完成(尽管它需要一些额外的修补)。将
rails
放入
Gemfile
以获得一个简单的解决方案,或者通读迁移指南以更好地理解api:很好,Sean Huber,我没有注意到sinatra gem。我不怎么用辛纳屈。“rspec-rails”gem会与Sinatra一起工作吗?从rspec-rails中列出的运行时依赖关系中,我看到了activesupport、actionpack和railties的运行时依赖关系。我相信您可以只使用sinatra和这些rails组件建立一个项目,并让rspec rails+活动记录迁移工作。但在我看来,如果你把所有这些rails的精华都带进来,你最好在rails之上构建你的应用程序,而不是自己拼凑起来。好问题。另外,
db:test:prepare
4.1
中被弃用,并已被完全删除