Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec redirect_跟踪多个重定向_Ruby On Rails_Rspec - Fatal编程技术网

Ruby on rails Rspec redirect_跟踪多个重定向

Ruby on rails Rspec redirect_跟踪多个重定向,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在尝试编写一个测试,以确保用户在登录后被重定向到正确的页面。然而,问题是,用户在到达我要检查的页面之前要经历两次重定向。当前正在使用expect(subject)。若要重定向到(帐户计划页面)将在第一次重定向时停止重定向链,而不会继续到最后一页。因此,登录流程是localhost/signin->localhost/->localhost/account/plan。我想测试用户是否到达/account/plan,但将\u重定向到根路径上的stops。是否有必要让rspec跟随最终重定向,而不

我正在尝试编写一个测试,以确保用户在登录后被重定向到正确的页面。然而,问题是,用户在到达我要检查的页面之前要经历两次重定向。当前正在使用
expect(subject)。若要重定向到(帐户计划页面)
将在第一次重定向时停止重定向链,而不会继续到最后一页。因此,登录流程是
localhost/signin->localhost/->localhost/account/plan
。我想测试用户是否到达
/account/plan
,但将\u重定向到根路径上的stops。是否有必要让rspec跟随最终重定向,而不是在第一个重定向结束

缩写登录规范:

describe 'login', type: :request do
  let(:user) { FactoryGirl.create(:user) }
  subject { post '/signin', { user: { email: user.email, password: user.password } } }

  it 'redirects a user properly' do
    accounts_plan_page = 'http://127.0.0.1:3000/account/plan'
    if user.account.requires_metered?
      expect(subject).to redirect_to(account_plans_page)
    end
  end
end
这会返回一些与

Expected response to be a redirect to <http://127.0.0.1:3000/account/plan> but was a redirect to <http://127.0.0.1:3000/>
预期响应是重定向到,但却是重定向到

您可以使用
post\u via\u redirect
而不是
post
来运行测试,从而让您的请求规范遵循重定向


Rspec请求测试是Rails内置集成测试的包装,它有一套更广泛的测试可供使用。

谢谢。我能用这个让事情顺利进行。我最后查看了
响应。原始url
,以确定我是否登录到了正确的页面。这是最好的检查方式,还是有其他方法?我想没关系。您还可以查看Rspec的功能测试——它们允许您模拟完整的浏览器交互。