关于current_path对象,Rspec和capybara,visit和get方法之间的区别

ste*_*och 3 rspec ruby-on-rails capybara

我可能在这里混淆机架和水豚方法

let!(:admin){FactoryGirl.create(:admin)}

# test passes
describe "visiting #edit page" do
  before { visit edit_user_path(admin) }
  specify { current_path.should eq(edit_user_path(admin)) }
end

# test fails
describe "getting #edit page" do
  before { get edit_user_path(admin) }
  specify { current_path.should eq(edit_user_path(admin)) }
end
Run Code Online (Sandbox Code Playgroud)

第二次测试失败了:

     Failure/Error: specify { current_path.should eq(edit_user_path(admin)) }

       expected: "/users/51/edit"
            got: "/users/51"

       (compared using ==)
Run Code Online (Sandbox Code Playgroud)

一个before(:each)块,将current_path设置为/users/51,所以看起来它在使用时仍然保持这种状态get.

我只想在这里查看:

  • 访问的current_path来自水豚,而得到来自机架上?
  • 请问的current_path对象必然要求您使用的访问方法,以保持它的更新?

apn*_*ing 6

你的问题是一个共同的问题,并在Jose Valim的一篇文章中有描述.

简而言之,在集成测试中,只能使用visit.