2014-12-19 52 views
0

我試圖清理規格之間的數據庫。所以我決定使用流行的gem database_cleaner。 現在的問題是,當我使用FactoryGirl創建模型的新實例時,會創建它,但不會顯示在頁面中。在數據庫中創建實例但未在頁面中顯示。在Rspec中測試清潔

這裏是我的spec_helper:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'capybara/rails' 
require 'capybara/rspec' 
require 'factory_girl_rails' 
require 'pry' 
require 'database_cleaner' 

RSpec.configure do |config| 
    config.expect_with :rspec do |expectations| 
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    config.include FactoryGirl::Syntax::Methods 

    config.order = :random 
    Kernel.srand config.seed 

    config.before(:suite) do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with(:truncation) 
    end 
    config.before(:each, type: :feature) { DatabaseCleaner.strategy = :truncation } 
    config.before { DatabaseCleaner.start } 
    config.after { DatabaseCleaner.clean } 
end 

而且簡單的測試,我想運行的是這個:

require 'spec_helper' 

feature 'designs' do 
    feature 'editing designs' do 
    before(:each) { visit designs_path} 
    given!(:design){ create(:design)} 

    scenario "from the designs index" do 
     binding.pry 
     expect(page).to have_content("Ninja Crane") 
    end 
    end 
end 

我用binding.pry檢查設計的數量和看這一頁。結果是設計正確創建,但沒有顯示在頁面中。

在此先感謝!

+0

可能您在創建對象之前訪問該頁面 – Fer

+0

我添加了睡眠併發生了相同的情況。我不認爲這是問題。 – hcarreras

+1

這不是睡覺的問題。爲什麼要解決你的問題?在('each){visit designs_path}'之前放置一個'binding.pry'到塊'',然後檢查這個'designs'表是否包含數據 – Fer

回答

1

值得注意的是given!只是let!的別名,而scenario只是it的別名。這些是defined by Capybara

在RSpec中,let!使用beforeunder the hood。每個before塊按定義順序運行。這意味着,如果您在let!塊之前定義了before(:each)塊,則說明RSpec在before(:each)塊之後運行let!塊。在這種情況下,您將在訪問設計路徑後創建設計。

全部before塊在it塊之前評估之後。這就是爲什麼您能夠在binding.pry聲明中看到數據庫中的記錄的原因。

我建議您將所有的given!定義放在頂部,以確保在評估任何規格之前對它們進行了定義。

我還動試驗(visit design_path)爲scenario塊的運動階段,如使用before使得它更難告訴你實際上測試,使得它更可能是測試不同的順序運行你在期待。

相關問題