2014-09-13 45 views
1

我有幾個非JavaScript的規格,使用用戶界面來創建和編輯記錄。 當我運行這些規格時,測試數據庫記錄將由rspec拆卸爲我自動爲每個測試刪除。爲什麼使用javascript的rspec功能規範不做測試拆解?

但是,下面這個測試是第一個對某些ajax產品擁有:js => true的測試,不會在之後進行記錄拆除,然後測試開始中斷,因爲數據庫在啓動時不再是空的。鏈接和組行仍然存在於測試數據庫中。

# spec/features/verifying_link_spec.rb 
require 'spec_helper' 

describe "verification", :js => true, :type => :feature do 

    before :all do 
    User.create(:username => '[email protected]', :password => 'esceptio') 
    end 

    before :each do 
    visit '/ladmin/login' 
    fill_in 'username', :with => '[email protected]' 
    fill_in 'password', :with => 'esceptio' 
    find('input[value="Login"]').click 
    end 

    it "lets me verify a link" do 
    find('div#side div a', text: 'New Group').click 
    fill_in 'group[group_name]', with: 'Group Add' 
    click_button 'Save' 
    find('div#side div a', text: 'New Link').click 
    fill_in 'link[url_address]', with: 'http://www.a.com/newtest9876link' 
    fill_in 'link[alt_text]', with: 'abcd9876' 
    click_button 'Save' 
    this_year=Time.now.strftime('%Y') 
    l=Link.first 
    l.update_attribute(:verified_date, nil) 
    expect(Link.count).to eq 1 
    visit links_path 
    find('a', text: "verify") 
    click_link("verify", match: :first) 
    sleep(3) 
    expect(page).to have_content(this_year) 
    end 

end 

現在我使用使用UI刪除的記錄(下圖)的解決方法解決方案,但是這不應該是我的其他單元測試或功能測試需要

# added at bottom of spec 
    click_link('Details') 
    click_link('Delete') 
    page.driver.browser.switch_to.alert.accept 
    click_link('Groups') 
    click_link('Delete') 
    page.driver.browser.switch_to.alert.accept 

無(除這一個與JS)有這個問題。它們都會創建自動刪除的記錄。

+1

您使用的是database_cleaner gem嗎?你用什麼來運行JS測試,硒,phantomjs,chromedriver? – ChrisBarthol 2014-09-13 14:15:50

+0

我沒有使用數據庫清理寶石。我正在考慮它。雖然我想知道爲什麼這個測試有這個問題(而其他人不知道),但我正在做的是學習。我也有一些關於在每次測試之間截斷數據庫的策略以及是否會有任何性能影響的問題。我正在使用我認爲使用硒的RSpec和水豚 – 2014-09-13 14:54:10

回答

1

我強烈建議使用database_cleaner gem在測試之間清理數據庫。 Rspec將所有內容都包含在事務中,並在完成示例後將其回滾。但是,當您開始使用JavaScript時,您可能會將數據保存在rspec事務之外,然後數據庫不會恢復到其原始狀態。

截斷比事務策略慢。但是,您可能只需要JS測試的截斷策略。你可以按照這個指南設置數據庫清潔寶石的方式:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

如果你發現你的測試需要很長時間,你可能想要調查一下看一個預加載你的環境的gem。我強烈建議zeus