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

问题描述 投票:0回答:2

我有一个使用ActiveRecord和sqlite的ruby应用程序。我正在尝试编写测试,但是我收到了这个错误:

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

     ActiveRecord::StatementInvalid:
       Could not find table 'users'

这是我的gemfile:

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测试的迁移?

ruby activerecord rspec
2个回答
3
投票

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


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并且你很高兴。

© www.soinside.com 2019 - 2024. All rights reserved.