我有一个使用ActiveRecord和sqllite的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测试运行迁移?
发布于 2018-06-01 10:49:38
bin/rails RAILS_ENV=test db:migrate和/或bin/rails db:test:prepare将更新您的测试数据库。你可能也想看看Rails Testing Guides --那里有很多有用的信息。或者,如果您不想使用fixture,那么FactoryBot非常适合于生成测试数据。
发布于 2018-06-01 18:10:35
吉尼的答案是可行的,但如果像肖恩提到的那样,你需要一个仅限ActiveRecord的解决方案,而不是使用Rails,请考虑以下内容:
我最近开发了一个gem,可以在不使用Rails的情况下绑定一些ActiveRecord模型。下面是我用rspec测试我的模型的方法:
spec/spec_helper.rb:
ActiveRecord::Base.establish_connection(adapter: 'sqlite3',
database: ':memory:')
ActiveRecord::Schema.define do
require_relative '../lib/db/migrate/create_models'
endlib/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,这样就可以了。
https://stackoverflow.com/questions/50635290
复制相似问题