2012-01-20 55 views
2

我正在運行我的測試使用測試/單位和水豚的軌道應用程序。我對rails很新,所以我希望我錯過了一些明顯的東西。我有以下集成測試來填寫單個字段並提交表單。這是否運行正常並測試通過:與水豚的軌道集成測試填寫與以前的測試值的形式

test "create post with title only should add post" do 
    assert_difference('Post.count') do 
     visit '/posts/new' 
     fill_in :title, :with => "Sample Post" 
     click_button 'create Post' 
    end 

    assert current_path == post_path(Post.last) 
    assert page.has_content?("Sample Post") 
    end 

我添加了第二個試驗中,幾乎複製之前的測試,還填寫了第二場和額外的輸入檢查(失敗)。

test "create post with title and body should add post" do 
    assert_difference('Post.count') do 
    visit '/posts/new' 
     fill_in :title, :with => "Testing" 
     fill_in :body, :with => "This is a sample post" 
     save_and_open_page 
     click_button 'create Post' 
    end 
    save_and_open_page 
    assert current_path == post_path(Post.last) 
    assert page.has_content?("Testing") 
    assert page.has_content?("This is a sample post") 
end 

當這個失敗了,我加入了呼籲:

save_and_open_page 

,發現形式正在從前面的測試中填寫的標題值,並在所有提供任何身體的價值。測試的名稱和斷言符合第二個測試,所以這不是錯誤的身份。似乎水豚沒有得到更新的值。我也有這個代碼在我的test_helper.rb文件中:

DatabaseCleaner.strategy = :truncation 

module ActionController 
    class IntegrationTest 
    include Capybara::DSL 

    self.use_transactional_fixtures = false 

    teardown do 
     DatabaseCleaner.clean 
     Capybara.reset_sessions! 
     Capybara.use_default_driver 
    end 
    end 
end 

我假設這應該清除測試之間的值。由於顯然沒有發生,我也嘗試給Capybara.rest_sessions添加一個電話!在第一次測試結束時,這並沒有幫助。

任何意見或幫助將不勝感激。

回答

4

我想通了。我正在使用symbol:title代替字段id的字符串調用填充方法。我需要使用'post_title'。我是以這種方式開始的,但沒有在模型名稱前加上名稱,所以沒有找到它,並且當我更改爲我在erb代碼中使用的符號時它開始工作。

因此,使用:的

fill_in 'post_title', :with => "whatever" 

代替

fill_in :title, :with => "whatever" 
+0

也許這標誌着作爲答案? –

+0

我打算(而且剛剛做),我只是被允許,因爲你需要等待兩天來標記你自己的答案......當我試圖早些時候做它,它告訴我,我不得不再等2個小時。 –