0

我在使用 selenium 使用 rspec 测试贝宝授权的功能时遇到了一个奇怪的问题。从贝宝返回我的网站时,它声称找不到具有该特定 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  

导致错误的是 PaypalPreapproval.find(params[:id]),尽管上面的行似乎能够找到具有该 ID 的用户。

这是我的临时修复,适用于我的 spec_helper

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

有人有想法么?

4

1 回答 1

1

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

Capybara.server_port = 4000

我已经为我的 base_url 设置了一个环境变量

ENV['BASE_URL'] = "http://localhost:3000"

我只是指定它是

ENV['BASE_URL'] = Rails.env.test? ? "http://localhost:4000" : "http://localhost:3000"

希望这可以节省其他人半天的调试时间。

于 2013-09-22T18:11:53.263 回答