2016-03-16 54 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