Cim*_*imm 33 authentication testing ruby-on-rails webrat capybara
我正在为我的Rails 3应用程序编写一些RSpec测试,并尝试从Webrat切换到Capybara.到目前为止这么好,但应用程序使用HTTP基本身份验证来授权我的管理员用户,任何想法如何与Capybara测试?
这是我目前的Webrat步骤:
it 'should authenticate for admin' do
basic_auth('user', 'secret')
visit '/admin'
response.status.should eql 200
response.status.should_not eql 401
end
Run Code Online (Sandbox Code Playgroud)
我如何与Capybara一起做这个?谢谢!
And*_*erg 42
我用它page.driver.basic_authorize(name, password)
代替了它
更新:
目前,在Capybara升级之后,我正在使用这一堆解决方法:
if page.driver.respond_to?(:basic_auth)
page.driver.basic_auth(name, password)
elsif page.driver.respond_to?(:basic_authorize)
page.driver.basic_authorize(name, password)
elsif page.driver.respond_to?(:browser) && page.driver.browser.respond_to?(:basic_authorize)
page.driver.browser.basic_authorize(name, password)
else
raise "I don't know how to log in!"
end
Run Code Online (Sandbox Code Playgroud)
Szy*_*był 25
默认的Capybara驱动程序rack-test有一个Basic HTTP Auth basic_authorize
方法(带别名authorize
),digest_authorize
Digest HTTP Auth,你可以在这里找到它们:https://github.com/brynary/rack-test/blob/master /lib/rack/test.rb
所以你可以这样做:
page.driver.browser.authorize 'login', 'password'
Run Code Online (Sandbox Code Playgroud)
或者您可以为Basic HTTP Auth编写一个简单的帮助器:
def basic_auth(user, password)
encoded_login = ["#{user}:#{password}"].pack("m*")
page.driver.header 'Authorization', "Basic #{encoded_login}"
end
Run Code Online (Sandbox Code Playgroud)
没有一个page.driver.*
解决方案对我有用。我使用的是 Poltergeist,而不是 Selenium,所以这可能与它有关。这是有效的:
RSpec.shared_context "When authenticated" do
before do
username = 'yourusername'
password = 'yourpassword'
visit "http://#{username}:#{password}@#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}/"
end
end
Run Code Online (Sandbox Code Playgroud)
然后,在您的规范中:
feature "Your feature", js: true do
include_context "When authenticated"
# Your test code here...
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13074 次 |
最近记录: |