Testing 如何用 RSpec 测试多个不同项目的数据库?

zhangjingqiang · 发布于 2016年09月07日 · 最后由 zhangjingqiang 回复于 2016年09月07日 · 618 次阅读
592

现在有一个需求,在项目1中要用rspec测试外部数据库中数据对此项目数据的影响,为便于说明,起名如下:

  • 现项目名:app1
  • 现项目数据库:database1
  • 外部项目名:app2
  • 外部项目数据库:database2

在config/database.yml中添加app2_test测试数据库:

app2_test:
  <<: *app2_default
  database: app2_test

在db/schema.rb中添加创建app2中库的表的schema:

create_table "products", force: :cascade do |t|
  t.string "name"
end

并用factory_girl构建测试数据:factory :product, :class => App2::Product do。 但当我执行rspec测试时,显示这样的消息:

Failure/Error: let(:app2_products) { create(:product) }

ActiveRecord::StatementInvalid:
  Mysql2::Error: Table 'app2_test.products' doesn't exist: SHOW FULL FIELDS FROM `products`
# ./spec/my_spec.rb:4:in `block (2 levels) in <top (required)>'
# ./spec/my_spec.rb:12:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# Mysql2::Error:
#   Table 'app2_test.products' doesn't exist
#   ./spec/my_spec.rb:4:in `block (2 levels) in <top (required)>'

怎么建立app2中数据库中的表呢?

共收到 1 条回复
592

暂时的方法是在app2手动执行:

rake db:migrate RAILS_ENV=test

在app1可以测试。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册