使用PaperTrail gem导航YAML夹具错误

问题描述 投票:0回答:2

我正在尝试创建一个用于测试控制器的rails fixture,该控制器获取与paper_trail gem(7.0.1)持久化的版本。但是,到目前为止,我还是无法在灯具内填充任何版本进行测试。而且,看起来YAML文件没有加载/正在打破其他测试。这是我的`versions.yml``文件的内容:

---
version_001:
  id: 1
  item_type: 'DistributionChannel'
  item_id: 1
  event: 'create'
  whodunnit: <%= User.find_by(email: '[email protected]').id.to_s %>
  object: nil
  created_at: 2017-05-15 12:00:00.000000000 Z
  object_changes: '---\\nid:\\n- \\n- 1\\nprimary_channel:\\n- \\n- Best Buy\\nsecondary_channel:\\n- \\n- ''\ncreated_at:\\n- \\n- 2017-05-15 12:00:00.000000000 Z\\nupdated_at:\\n- \\n- 2017-05-15 12:00:00.000000000 Z\\n'

架构包含版本表,其中包含相应的列btw。

ruby-on-rails ruby fixtures paper-trail-gem
2个回答
1
投票

我遇到了类似的问题。当我没有使用versions fixture(没有版本夹具YAML文件)时,这导致versions表没有在rake db:fixtures:load上清除,所以这让我在开发环境调试上很困惑。

为了避免这个问题,我介绍了versions夹具如下:

  1. 将fixture文件定位到test / fixtures / paper_trail / versions.yml,以便rake任务自动加载它。
  2. 手动编写object_changes数据是一项相当繁琐的任务,所以让我们使用to_yaml方法生成如下。创建和/或更新AR会生成版本记录,以便在命令行跟随生成yaml文件到tmp / versions.yml: $ rails console irb> File.write('tmp/versions.yml', PaperTrail::Version.all.map{|v| v.attributes}.to_yaml)
  3. 编辑tmp / versions.yml如下,并将其保存到test / fixtures / paper_trail / versions.yml: version_001: item_type: DistributionChannel item: distribution_001 event: create whodunnit: ... created_at: 2017-12-27 02:25:33.000000000 Z object_changes: "... (keep as above to_yaml generated)..."
  4. 现在,运行rake db:fixtures:load!它应该加载版本夹具到PaperTrail :: Version AR和distribution_001记录.versions方法应该包含它。

注1:上面的itemLabel Reference

注2:whodunnit应该是相同的。见Fixture label interpolation


0
投票

我最终通过在test_helper.rb中添加以下内容来加载夹具:

self.set_fixture_class versions: PaperTrail::Version

并且,使用以下yaml语法:

version_001:
  id: 1
  item_type: 'DistributionChannel'
  item_id: 1
  event: 'create'
  whodunnit: <%= ActiveRecord::FixtureSet.identify('user_example').to_s %>
  object: nil
  created_at: 2017-05-15 12:00:00
  object_changes: "---\nid:\n- \n- 1\nprimary_channel:\n- \n- Best Buy\nsecondary_channel:\n- \n- ''\ncreated_at:\n- \n- 2017-05-15 12:00:00.000000000 Z\nupdated_at:\n- \n- 2017-05-15 12:00:00.000000000 Z\n"

test_helper.rb的添加是必要的,因为Version表在PaperTrail中是命名空间。我已经看到了一些关于适当的yaml语法的相互矛盾的信息,所以我很犹豫地解释我的理论为什么yaml语法有效(评论中的任何解释都会非常感激)。但是,希望这有助于指导某人在使用Minitest测试paper_trail并使用灯具时朝着正确的方向前进。

© www.soinside.com 2019 - 2024. All rights reserved.