2012-09-11 82 views
1

我有給定的測試代碼:如何運行命令水豚一次,然後運行一些測試


describe 'A new user', js: true do 
    before do 
    @new_user = Fabricate.build(:user) 
    end 

    it 'should sign up' do 
    #login code 
    visit '/' 
    click_link 'Login' 
    fill_in 'user[email]', :with => @new_user.email 
    fill_in 'user[password]', :with => @new_user.password 
    click_button 'Login now' 
    #login code end 

    page.should have_content("Hello #{@new_user.first_name}!") 
    current_path.should == dashboard_path 
    end 

    it 'should receive a confirmation mail' do 
    #same login code again 
    visit '/' 
    click_link 'Login' 
    fill_in 'user[email]', :with => @new_user.email 
    fill_in 'user[password]', :with => @new_user.password 
    click_button 'Login now' 

    mail = ActionMailer::Base.deliveries.last 
    assert_equal @new_user.email, mail['to'].to_s 
    end 
end 

現在我想添加更多的測試。 爲了避免代碼翻倍,我怎麼才能在所有測試之前運行一次水豚登錄代碼? 一種解決方案是將登錄代碼放入before方法。另一個辦法是創建一個方法do_login,把代碼中並運行每一個測試是這樣的:

it 'should do something after login' do 
    do_login 
    #test code here 
end 

但對於這兩種解決方案,代碼運行的每個測試並且那不是我想要的。將登錄代碼放入before(:all)也不起作用。

我該如何運行一些水豚代碼,然後在此之後進行所有測試?

回答

2

您無法運行一次capybara代碼,然後運行所有測試。你總是從頭開始。您提出的解決方案與之前(:每個)或輔助方法是唯一的可能性。 (這是可能的運行之前(一些紅寶石:所有)如該交易check here但不是水豚之外創建對象)

爲了加快您的規格,你可以在不同的規格測試的登錄功能,然後以某種方式存根身份驗證,但它取決於你的實現。

如果您正在使用設計檢查色器件維基:https://github.com/plataformatec/devise/wiki/How-To:-Controllers-tests-with-Rails-3-(and-rspec)

+0

謝謝您的回答。你知道它爲什麼不起作用嗎?這是水豚還是別的什麼問題? – ben

+0

瀏覽器重置了每個規格。這不是功能錯誤。 –