Ruby Rspec selenium在从外部url返回后未将环境设置为development之后找不到数据

Ruby Rspec selenium在从外部url返回后未将环境设置为development之后找不到数据,ruby,rspec,selenium-webdriver,Ruby,Rspec,Selenium Webdriver,我在使用selenium使用rspec测试paypal授权时遇到了一个奇怪的问题。当从paypal返回我的站点时,它声称找不到具有该特定id的必要数据,但似乎找到了另一条数据。在测试中,我将数据打印到终端,它就在那里。当我在spec_helper中将环境更改为开发时(我知道这很糟糕),它起了作用 以下是错误: Couldn't find PaypalPreapproval with id=1 这是我控制器中的代码 def show user = User.find(params[:user

我在使用selenium使用rspec测试paypal授权时遇到了一个奇怪的问题。当从paypal返回我的站点时,它声称找不到具有该特定id的必要数据,但似乎找到了另一条数据。在测试中,我将数据打印到终端,它就在那里。当我在spec_helper中将环境更改为开发时(我知道这很糟糕),它起了作用

以下是错误:

Couldn't find PaypalPreapproval with id=1
这是我控制器中的代码

def show
  user = User.find(params[:user_id])
  preapproval = PaypalPreapproval.find(params[:id])
  preapproval.activate
  send_welcome_message(user) if user.addresses.count == 1
end  
导致错误的是paypalpreproval.find(params[:id]),尽管上面的行似乎能够找到具有该id的用户

这是我在spec_助手中使用的临时修复程序

if Capybara.current_driver == :selenium
  ENV["RAILS_ENV"] ||= 'development'
else
  ENV["RAILS_ENV"] ||= 'test'
end

有人有什么想法吗?

我解决了。运行selenium时,它会随机生成一个端口号并启动该服务器。一旦您的测试运行到服务器外部(外部url),您的返回url需要包括运行测试服务器的端口。我将此添加到我的spec_助手中:

Capybara.server_port = 4000
我已经为我的基本url设置了一个环境变量

ENV['BASE_URL'] = "http://localhost:3000"
我只是把它指定为

ENV['BASE_URL'] = Rails.env.test? ? "http://localhost:4000" : "http://localhost:3000"
希望这能为其他人节省半天的调试时间