我正在使用Ruby on Rails框架,我有一个名为“Post”的ActiveRecord模型,其中包含以下列:
- ID:bigint
- title:string我在我的项目中使用了GitLab CI/CD。让我们假设索引测试已成功通过。
现在,我需要在一个单独的Merge Request中创建一个迁移,以便向另一个表添加一个额外的引用列。下面是迁移代码:
add_reference :posts, :person, foreign_key: { to_table: :persons }, index: true
在我的Rails项目中,我配置了如下模式格式:
config.active_record.schema_format = :sql
执行此迁移后,将创建一个新索引。第一步,我想创建一个Ruby脚本,它可以比较上游分支中的“structure.sql”文件和当前分支版本中的“structure.sql”文件。该脚本应该能够检测新创建的索引并返回这些索引的数组。
我正在寻求关于如何实现这个Ruby测试和检索有关创建的索引的信息的指导。
1条答案
按热度按时间oiopk7p51#
可以比较不同git版本的SQL DB结构,但这不是测试的好方法。你会锁定提交SHA "pre-index"并与当前 checkout 的提交进行比较吗?这里有一些复杂的问题,比如在合并之前重新设置基础。
而只是测试索引是否存在。索引何时得到利用通常取决于DB,所以让我们忽略它。但Assert索引存在很简单。
shoulda-matchers是一个非常常见的Rails & Rspec测试gem。它提供了一个
have_db_index
匹配器,您可以在RSpec测试中使用该匹配器来Assert索引存在。如果你还没有使用它,我建议你试试。这是我在rails new
之后安装的第一批gem之一一旦你安装了gem(参见他们的github页面),你就可以在类似的测试中使用matcher:
甚至这可能比许多开发人员测试的要多一点,但这是一个快速和简单的测试,所以如果你想在这里彻底的话,没有什么害处。
您还可以使用gem为这种关系添加一个简单的测试: