【问题标题】:Can I add migrations and models to a gem?我可以将迁移和模型添加到 gem 中吗?
【发布时间】:2015-02-19 07:03:25
【问题描述】:

我有一个 gem,而不是一个引擎,我一直在构建它来将我的模型移出我的应用程序。这些只是一组使用ActiveConcern::Support class/base/module 的模块。表关系位于 include do ... end 块中。

然后将这些模块包含在核心应用模型中,以定义关系和各种关注点。

我想做的是在虚拟应用程序中创建一组迁移,编写一些规范测试,然后测试模型以及它们在使用这些模块时的关系。

现在我已经编写了我在虚拟应用中设置模型的迁移,问题是现在如何测试它们..

我的问题是,我是否应该在 spec/dummy 和使用这些模块的模型中创建迁移,然后使用 spec/ 目录来保存我所有的实际测试?

或者它不会起作用(我认为它会的方式)?在引擎中,我将拥有一个 app 目录和一个 db 目录以及所有实际迁移和模型所在的所有有趣的东西,但由于这只是我拥有的一个宝石,就像你在引擎中一样,只是 一个虚拟应用程序。

那么我将如何测试我提取的新模型?我这样做的方式是正确的吗?在虚拟应用程序中设置迁移、模型,在规范应用程序中编写测试,然后执行典型的 bin/rspec? 它会知道在加载测试数据库时使用虚拟应用程序吗?它会知道将虚拟应用程序用于需要测试的模型吗?

【问题讨论】:

    标签: ruby-on-rails ruby rspec gem


    【解决方案1】:

    在过去,当我需要测试视图助手、控制器混合、路由助手时,我只会使用虚拟应用程序路由。对于你所描述的,我认为你不需要所有这些。

    首先,对于数据库方面,没有必要使用迁移 - 迁移是为了增量更改数据库的状态。对于您的使用,schema.rb 文件就足够了(您最初可以从要从中提取它的应用程序中复制该文件)

    在你的 spec_helper 中你会想要类似的东西

    ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', ...)
    load(File.dirname(__FILE__) + "/schema.rb")
    

    显然,您可以更改建立连接的方式(即从 yaml 文件、环境变量等)。

    您的规格可能看起来像

    describe SomeMixin do
      class ThingIncludingMixin < ActiveRecord::Base
        include SomeMixin
        set_table_name :foos #if your table name doesn't match this class name
      end
    
      #tests go here
    end
    

    【讨论】:

    • 你能举一个例子来说明如何测试两个模型之间的关系吗?我会在该描述块中添加另一个类吗?
    • 是的 - 添加任意数量的类。您也可以在规范/支持中添加它们
    • 谢谢,这是我怀疑但不确定的。
    • 当你的 mixin 改变了类本身时,我发现为每个测试创建类是非常有用的: let(:klass) { Class.new(ActiveRecord::Base) { include SomeMixin } }; let(:instance) { klass.new }
    猜你喜欢
    • 2020-08-17
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2020-04-20
    相关资源
    最近更新 更多