gpt4 book ai didi

ruby-on-rails - 即使指定了 `maintain_test_schema!`,测试迁移也未与我的 Rails 引擎一起运行

转载 作者:行者123 更新时间:2023-12-04 03:36:44 24 4
gpt4 key购买 nike

我正在开发一个 Rails 引擎(插件)。到目前为止我有

  • 将 RSpec 设置为框架
  • 添加了一个迁移以创建一个名为 MyJob 的模型/表
  • spec/models/my_job_spec.rb下添加了一些基本模型测试

  • rails 模板会自动创建一个 spec/dummy应用程序,所以我执行以下操作来运行我的测试
    # Create the development and test DBs
    rake db:create

    # Copy migrations over to my dummy app
    cd spec/dummy
    rake my_app:install:migrations
    cd ../..

    # Run specs
    rspec spec/models/my_job_spec.rb

    但是,当我运行规范时,出现错误:
    > rspec spec/models/
    /Users/jeeves/.rvm/gems/ruby-2.2.2@gb/gems/activerecord-5.1.0/lib/active_record/migration.rb:576:in `check_pending!': (ActiveRecord::PendingMigrationError)

    Migrations are pending. To resolve this issue, run:

    bin/rails db:migrate RAILS_ENV=test

    我认为这会自动发生,因为在我的 rails_helper.rb 中我肯定有以下内容,它应该为我维护我的测试模式
    ActiveRecord::Migration.maintain_test_schema!

    它与插件或引擎的工作方式不同吗?

    编辑:我尝试了运行 bin/rails db:migrate RAILS_ENV=test 的建议, 内部 spec/dummy/然后重新运行 rspec spec/ .仍然没有运气。

    最佳答案

    好的,发现我对其他偶然发现的人做错了一些事情。

    首先,我不需要运行 rake my_app:installations:migrations在测试或开发时。显然,这仅适用于我的应用程序的下游用户,当他们想要将我的引擎的迁移复制到他们的主机应用程序时。回想起来,各种博客中的说明等都提到了这一点,但我仍然认为,如果这是您第一次尝试弄明白,很容易误解。

    其次,所有命令都只能从引擎的根目录执行,rails 可确保正确应用它们。所以这只是运行 rake db:migrate 的问题从您的引擎根目录和虚拟应用程序将被迁移。

    第三,我停止使用 ActiveRecord::Migration.maintain_test_schema! .正如上面的用户所指出的,它并没有真正像宣传的那样工作。 rake db:migrate RAILS_ENV=test正确迁移了我的测试数据库,但由于嵌套虚拟应用程序的设置方式,maintain_test_schema!方法的东西没有被迁移。没有在两种环境中自动迁移它有点烦人,但我会接受它。

    所以整个过程,最后很简单,归结为:

    # Create the development and test DBs
    rake db:create

    # Migrate
    rake db:migrate
    rake db:migrate RAILS_ENV=test

    # Run specs
    rspec spec/models/my_job_spec.rb

    同样,回想起来似乎很简单,但在途中学到了一些东西。

    关于ruby-on-rails - 即使指定了 `maintain_test_schema!`,测试迁移也未与我的 Rails 引擎一起运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233207/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com