我正在尝试创建一个rails fixture来测试一个控制器,该控制器获取持久存在paper_trail gem(7.0.1)的版本。但是,到目前为止,我还是无法在灯具内填充任何版本进行测试。而且,看起来YAML文件没有加载/正在打破其他测试。这是我的`versions.yml``文件的内容:
with open("C:\pavan\pav.csv",'a',newline='') as wr:
架构包含版本表,其中包含相应的列btw。
答案 0 :(得分:1)
我遇到了类似的问题。当我没有使用versions
fixture(没有版本夹具YAML文件)时,这导致versions
表未在rake db:fixtures:load
上清除,因此这使我对开发感到困惑环境调试。
为了避免这个问题,我引入了versions
fixture,如下所示:
手动编写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)
按如下方式编辑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)..."
rake db:fixtures:load
!它应该将版本夹具加载到PaperTrail :: Version AR,而distribution_001记录.versions
方法应该包含它。注意事项1:上面item
为Label Reference
注意2:whodunnit
应该是相同的。见Fixture label interpolation
答案 1 :(得分: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并使用灯具时朝着正确的方向前进。