2016-08-22 40 views
0

我有一個ActiveRecord類,Post。Poltergeist輸入db信息

在與水豚,RSpec的和騷靈運行我的功能規格,我創建的這兩個實例與FactoryGirl

FactoryGirl.create(:post, topic: "Blade running") 
FactoryGirl.create(:post, topic: "Dreaming of electric sheep") 

,我可以馬上驗證規範:

scenario "Linking to post by tag", js: true do 
    FactoryGirl.create(:post, topic: "Blade running") 
    FactoryGirl.create(:post, topic: "Dreaming of electric sheep") 
    Post.count # => 2 
    Post.all.all?(&:persisted?) # => true 
    visit root_path 
    # more stuff 
end 

但是,當在下一行中,我訪問我的應用程序的根路徑(指向我的帖子應用程序中的索引操作),帖子消失(以及它們的關聯):

class PostsController < ApplicationController 
    def index 
    @posts = Post.all # => [] 
    #stuff 
    end 

# more methods 
end 

,當我回來了控制器動作,測試級別,他們又回來:

Post.count # => 2 
Post.all.all?(&:persisted?) # => true 
visit root_path 
Post.count # => 2 
Post.all.all?(&:persisted?) # => true 

在不使用JS我沒有這個問題的規範 - 和從場景中刪除「js:true」可以修復它。但是因爲我使用的是需要JS的站點的一部分,所以這不是一個選項。

我會把這個發佈在Poltergeist的問題上,但是由於我做了一些非常基本的事情,所以我覺得我做錯事的可能性要比這部分的Poltergeist壞了。我的錯誤是什麼?

版本: Rails是5.0.0 鬼驅人是1.10.0 水豚是2.8.0 Rspec的-Rails是3.5.1

回答

2

這聽起來像你正在使用事務的測試不與工作JS功能的驅動程序,因爲測試代碼和應用程​​序代碼運行在不同的線程中。每個線程維護自己的數據庫連接,這意味着一個線程在提交事務之前不能看到其他線程中創建的記錄。通過事務性測試,事務永遠不會被提交,因此線程無法看到其他線程中創建的任何內容。請參閱https://github.com/jnicklas/capybara#transactions-and-database-setup,然後將database_cleaner配置爲使用截斷(或刪除)策略來進行支持JS功能的測試 - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example

+0

工作正常,謝謝:) – Arepo