如何运行测试套件的迁移。

时间:2018-06-01 02:28:56

标签: 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-activerecord"
gem "sqlite3"

group :test do
  gem 'database_cleaner'
end

group :test, :development do
  gem "rspec-rails", ">= 2.1.0"
  gem "pry"
end

我有一个看起来像这样的spec_helper:

RSpec.configure do |config|


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

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

2 个答案:

答案 0 :(得分:3)

bin/rails RAILS_ENV=test db:migrate和/或bin/rails db:test:prepare将更新您的测试数据库。您也可以查看Rails Testing Guides - 那里有很多有用的信息。或者如果你想避免使用灯具,FactoryBot非常适合生成测试数据。

答案 1 :(得分:1)

Ginnie的答案可行,但如果像Sean所说,你需要一个只有ActiveRecord的解决方案,而不是使用Rails,请考虑这个:

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

<强>规格/ spec_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 < ActiveRecord::Migration[5.1]
 create_table "users", force: :cascade do |t|
   t.string "uid", default: "", null: false
   t.string "email", null: false
   // other attributes
 end
 // other tables
end

这将为您的测试创建所需的表格。

不要忘记在* _spec.rb文件中要求spec_helper,你就可以了。