2017-05-24 93 views
0

我正在尝试创建一个轨道夹具来测试一个控制器,该控制器读取paper_trail宝石(7.0.1)持久保存的版本。但是,我迄今为止无法在灯具中填充任何版本来进行测试。而且,看起来YAML文件没有加载/正在打破其他测试。这是我的`versions.yml``文件的内容:Rails YAML夹具错误与PaperTrail宝石

--- 
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相应列的版本表。

+0

在这里出现肢体,object_changes是否需要双引号? –

+0

你会得到什么样的错误信息? “object_changes”的值是否真正计算**两次**以从加载的YAML中获得双反斜杠(为此,它们不是**转义序列,即'\\ n'加载为3个字符)。你确切的问题是什么?是否有paper_trail的替代方案?如何将YAML转换为JSON?如果你可以使用XML编写测试? – Anthon

+0

当使用db:fixtures:load加载灯具时,我实际上并没有收到错误,但是当撬入测试时没有加载任何版本。我一定想继续使用paper_trail。而且,这是我的理解,我需要逃避新的行字符,因此额外的'\'。因为我更喜欢工厂,所以我对夹具非常陌生。简而言之,我期待看看是否有任何明显的语法错误或其他打嗝,以至于那些具有paper_trail经验的人可能知道这会妨碍加载Fixture。谢谢! – lgants

回答

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中是必需的,因为版本表是命名空间在PaperTrail内。我已经看到了一些关于适当的yaml语法的相互冲突的信息,所以我很犹豫解释我的理论为什么yaml语法起作用(任何解释中的评论将不胜感激)。但是,希望这将有助于指出某人在使用Minitest测试paper_trail并使用灯具时正确的方向。

1

我面临类似的问题。当我没有使用versions夹具(没有版本夹具YAML文件)时,这导致versions表未被清除,因此这让我很困惑于开发环境的调试。

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

  1. 定位夹具文件来测试/夹具/ 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如下,并将其保存到测试/夹具/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 :: AR版本,并且distribution_001记录.versions方法应该包含它。

NOTE-1:以上itemLabel Reference

NOTE-2:whodunnit应该是相同的。请参阅Fixture label interpolation