2013-01-16 27 views
0

我有一個頁面,當我真正使用它時渲染了很多東西,但在水豚中沒有渲染任何東西。在水豚測試中,視圖中的實例變量保持爲空

控制器是這樣的:

class IdeasController < ApplicationController 
    def index 
    @ideas = Idea.all 
    end 

頁的相關位是這樣的:

<div class="accordion" id="accordion"> 
    Ideas length is <%= @ideas.length %>. 
    <% @ideas.each do |idea| %> 
    <div class="accordion-group"> 
     <div class="accordion-heading"> 
     <%= link_to(idea.title, '#idea_' + idea.id.to_s, class: "accordion-toggle", data: {toggle: "collapse", parent: "#accordion"} ) %> 
     </div> 
     <%= div_for(idea, class: "accordion-body collapse") do %> 
      <div class="accordion-inner"> 
      <%= render :partial => "idea", locals: { :idea => idea } %> 
      </div> 
     <% end %> 
    </div> 
    <% end %> 
</div> 

當發展的角度看,這精美的作品,我得到的東西負載的視圖(我的數據庫充滿了模擬數據)。但是當我彈出它使用save_and_open_page中間測試時,它是完全空的,並且說「想法長度爲0」。

我做了rake db:test:clonerake db:test:prepare,但nada - 保持空白。

你能幫我弄清楚爲什麼?有沒有辦法窺視測試數據庫,看看有沒有什麼東西?

編輯:受到評論的啓發,我意識到麻煩一定是測試環境每次都會刷新所有東西,顯然沒有任何東西。在一個(顯然是誤導)試圖解決這個問題,我所做的:

before do 
    create(:idea) 
    visit root_path 
    click_link "Log In" 
    end 

注意create(:idea)線,這是應該引起我的想法工廠,並堅持一個模擬想法變成分貝(工廠正常工作與其他測試)。

現在這一頁說:

內部服務器錯誤

的SQLite3 :: BusyException:數據庫被鎖定:INSERT INTO 「用戶」( 「created_at」, 「電子郵件」, 「姓名」, 「供應商」 ,「uid」,「updated_at」)VALUES(?,?,?,?,?,?)

這是超出奇怪的。 Rails s正在後臺運行。

按照要求通過評議,全規格如下:

require 'spec_helper' 

describe "Idea page", js: true do 

    subject { page } 

    before do 
    create(:idea) 
    visit root_path 
    click_link "Log In" 
    end 

    context "Single idea" do 
    before do 
     save_and_open_page 
     #click_link('Eligendi sint quod quia alias sed sit vitae repellendus.') 
    end 

    it { should have_selector('a',text:'Claim') } 

    end 


end 
+0

您是否在訪問頁面之前創建Idea對象?在你的測試中的一個點上,你可以做'p Idea.all'或'p Idea.count'來獲得輸出到控制檯的信息。如果你使用的是寶石,你也可以使用Pry。您可以運行'rails c test'以進入測試環境的Rails控制檯。 – MrDanA

+0

你用'database_cleaner'創業板? – dimuch

+0

在你的規範中:'把idea.all'看看你是否有任何想法。此外,如果您將規範代碼添加到此問題中,這將有所幫助。 – ipd

回答

1

創建使用工廠的數據是正確的做法。要修復sqlite錯誤,您可能需要增加數據庫的超時時間。

要做到這一點,在config/database.yml

找到test:環境,並設置

timeout:

爲更大的值。所推薦的問題SQLite3::BusyException

之後,確保你有下面這行spec/spec_helper.rb

config.use_transactional_fixtures = false 

而且你正在使用類似database_cleaner,讓您的測試數據庫測試之間的清潔。

+0

我已經把它瘋狂地加了起來(500000),但現在瀏覽器窗口只是在登錄頁面旋轉,「等待127.0.0.1 ...」 – ezuk

+0

我會確保你有'config.use_transactional_fixtures = false'和如果你不這樣做,試試吧。如果這可以解決您的問題,或者至少改變了它,請確保添加'database_cleaner' gem或其他等價物。 –

+0

我確實啓用了database_cleaner。我還需要那個'transactional_fixtures'行嗎?如果是這樣,它會發生什麼? (什麼文件?) – ezuk