我有一个使用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测试的迁移?
答案 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,你就可以了。