2016-03-16 59 views
0

我有後續測試之間的cookie:水豚失去請求

def login_user(email, password) 
    visit new_user_session_path 
    fill_in 'E-mail', with: email 
    fill_in 'Password', with: password 
    click_button 'go' 
    end 

    scenario 'some test' do 
    order = Fabricate(:order_one, company: user.company) 
    visit "http://127.0.0.1:49645/orders/#{order.id}" # change to visit "/orders/#{order.id}" 
    login_user(user.email, user.password) 

    #assert 
    end 

請告訴我發生的是,在第一個步驟(visit...)的用戶沒有登錄,所以我使用的cookie設置一些信息。但是,當執行login_user時,此cookie爲空。

Usigin selenium-webdriver

這裏有什麼想法嗎?提前

+0

設置Cookie是驅動程序特定的。您使用的是什麼水豚驅動程序,您可以發佈'login_user'的代碼嗎? – BoraMa

+0

也許還可以使用[show-me-the-cookies gem](https://github.com/nruth/show_me_the_cookies)來確保您確實在「login_user」方法中正確設置了Cookie。 – BoraMa

+0

@BoraMa用更多的資訊更新這個問題。 – elf

回答

0

由於當使用JS能夠驅動#visit不能保證完成加載頁面時,它會返回。由於cookie在處理響應之前未在瀏覽器中設置,因此您的瀏覽器實際上會告訴瀏覽器停止處理它的當前訪問並訪問其他位置,這會阻止瀏覽器中的cookie被設置。第一次訪問後,您需要等待頁面上可見的內容,以確保Cookie正確設置。

scenario 'some test' do 
    order = Fabricate(:order_one, company: user.company) 
    visit "http://127.0.0.1:49645/orders/#{order.id}" 
    expect(page).to have_content('you are not logged in') #or whatever shows on the page visited 
    login_user(user.email, user.password) 

    #assert 
end 
+0

那麼,在調用''login_user''之前的某些內容期望使用''show_me_the_cookies''顯示cookie,但是當我在控制器中插入''puts' - >#{cookies [「redirect_prev」]}時, ,返回空 – elf

+1

如果告訴我cookie正在顯示在瀏覽器中設置了一個cookie,然後在下次訪問時未在控制器中設置該cookie,這意味着cookie設置不正確。也許你沒有把它設置在正確的域名上 - 第一次訪問是127.0.0.1 - 是第二次訪問它,或者是「http://example.com」(或其他) - 這會影響該cookie綁定的域名,如果它們不匹配,cookie將不會被髮送。如果這兩者都匹配,您是否爲cookie設置了一條路徑,使其不能從其他路徑訪問? –

+0

你說得對。問題是我正在使用不同的域。我只是將它改爲「visit」/ orders /#{order.id}「'',並且一切正常。謝謝您的幫助 – elf