嗨,我在我的rails应用程序中创建测试使用黄瓜。在我的步骤场景中我使用了http basic authenticate,到目前为止它通过了基本的身份验证,但是当我想在控制器上调用方法并发布一些params时,我遇到了问题:
首先我在步骤中使用此代码,但未能与控制器上的方法交叉:
post some_admin_url, @params
第二我使用了这段代码,也失败了,错误是在运行URI.parse重定向到“www.example.com”时我想去“localhost:3000 / admin”,所以我可以匹配数据:
Net::HTTP.post_form(URI.parse(some_admin_url), {'from' => '2005-01-01','to' => '2005-03-31'}) { |i| }
未来:
@selenium
场景:管理员想要激活用户
给定一个用户以admin身份登录
和管理员页面
步骤:
给出/ ^一个用户以admin $ / do登录
create_user_admin
访问'/ user_sessions / new'
fill_in'user_session [login]',:with =>'siadmin'
fill_in'user_session [password]',:with =>'12345'
click_button'Anmelden'
结束
给定/ ^管理页面$ /做
要求“net / http”
要求“uri”
uri = URI.parse(user_action_admin_users_url)<br/>
http = Net::HTTP.new(uri.host, uri.port)<br/>
request = Net::HTTP::Get.new(uri.request_uri)<br/>
request.basic_auth("username", "password")<br/>
response = http.request(request)<br/>
端
enter code here
帮助!!!
感谢
答案 0 :(得分:2)
fl00r的答案可能有效,但不会捕获重定向。 如果要捕获重定向,则必须在更高级别更改此设置。对于某些测试框架,有一种方法可以设置默认主机。
使用Capybara我们做到了:
Capybara.default_host = "subdomain.yourapp.local"
现在我们实际上使用Rack中间件(仅在测试环境中),更改为应用程序透明地更改env [HTTP_HOST],因此我们不必关心我们使用哪个testframework /浏览器驱动程序。
您使用什么框架?
答案 1 :(得分:0)
uname="myapp"
Capybara.default_host = "http://#{uname}.mywebsite.com:3000"
Capybara.server_port = 3000 # could be any of your choice
Capybara.app_host = "http://#{uname}.mywebsite.com:#{Capybara.server_port}"
OR
request.host="www.myapp.com"
,当您扩展ActionController :: TestCase
时答案 2 :(得分:-1)
尝试将url
更改为path
post some_admin_path, @params
或
post "http://localhost:3000/#{some_admin_url}", @params