Jul*_*and 5 subdomain selenium ruby-on-rails cucumber
TL:DR - 如何让Cucumber通过应用程序请求页面,但假装请求来自"http://mysubdomain.mydomain.dev",并正确运行javascript?
好的,这可能需要一段时间才能解释,但请耐心等待......
我是一个'相对'经验丰富的Rails开发者,但最近才进入了完整的BDD/TDD.
我在黄瓜测试的页面中有一些javascript用于创建一个新的嵌套对象(非常类似于这个RailsCast).
现在的问题在于,我不仅拥有可变的子域,而且我也有可变的域(只相信我那个......)
因此,应用程序需要查询request.host以查找current_domain和current_subdomain之前在后台绑定的所有内容,并且它可以继续提供应用程序的正确位.
我已经设法使用后台步骤中的技术host! domain和所有测试Capybara.default_host = domain.
但是,当我在测试带有.js的页面的功能上使用@javascript标记时,我会让Firefox抓住焦点,然后尝试加载完整的URL.
现在我也正在运行Pow,并将这些URL连接到开发服务器.不出所料,它们不像用户尝试登录时那样工作,而是在dev DB中查找.关闭了pow服务器之后我尝试运行套件,它刚刚超时.
肯定javascript webdriver不应该实际访问url,而只是运行应用程序本身并假装主机是我告诉它的???
我显然在这里遗漏了一些东西 - 如何让Cucumber在内部构建页面,但假装请求来自"http://mysubdomain.mydomain.dev"?
编辑: Jason - 变量域技巧与子域完全相同...如果您可以查询基于db的帐户request.subdomains.first,则可以通过查询域request.domain.你只需要仔细检查一些像大写等的东西,以最大限度地减少错误的网址破坏的风险,显然你需要确保首先在数据库中存在域记录......
哦 - 并小心缓存域记录请求...
这意味着您可以提供相同的应用程序,但具有不同的样式和登录页面等.对于具有广泛客户群的PaaS应用程序非常有用 - 您可以重新标记它并将其作为特定解决方案出售给一个群体的问题,即使它是下面的胆量相同.
我想做一些非常类似的事情。我考虑添加一个额外的 pow 目录进行测试,然后使用 pow 指令覆盖环境。我认为这是在应用程序目录中的“.powenv”中完成的。以下是快速修复的示例:
echo export RAILS_ENV=cucumber > .powenv && touch tmp/restart.txt
Run Code Online (Sandbox Code Playgroud)
但最好做一些动态的事情,这样在开始测试之前,你可以告诉 pow 要运行什么 env,然后完成后切换回来,甚至可以临时在不同的端口上运行测试服务器。Pow 是迄今为止我所知道的处理子域的唯一优秀解决方案。
编辑:我现在可以在我的环境中使用此功能,并在我的features/support/env.rb文件中添加以下内容。
# Switch Pow to For Cucumber Tests
Capybara.default_driver = :selenium # Subdomain testing will only work with pow and selenium
pow_config = "#{Rails.root}/.powenv" # Dont change, this is the Config Files Location.
pow_config_stash = "#{Rails.root}/.powenv_original" # This is what the config will be stashed as during testing.
Before do
# Set the default host
Capybara.app_host = "http://www.resipsa.dev"
# Stash the existing config
File.rename(pow_config,pow_config_stash) if File.exists? pow_config
# Write the new pow config
f = File.new("#{Rails.root}/.powenv", "w")
f.write "export RAILS_ENV=test"
f.close
# Touch tmp/restart.txt to force a restart
FileUtils.touch "#{Rails.root}/tmp/restart.txt"
end
After do
# Delete the temp config
File.delete(pow_config)
# Restore the Original Config
File.rename(pow_config_stash,pow_config) if File.exists? pow_config_stash
# Touch tmp/restart.txt to force a restart
FileUtils.touch "#{Rails.root}/tmp/restart.txt"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |