2017-05-24 37 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