测试时,错误的URI(不是URI?) Rspec的

我有这些奇怪的问题,我不知道如何解决它。 如果可以,请你帮助我。

这是测试结果:

1) Admin can edit a hotel Failure/Error: visit edit_admin_hotel_path(hotel) URI::InvalidURIError: bad URI(is not URI?): # ./spec/requests/admin_spec.rb:32:in `block (2 levels) in ' 2) Admin can edit a user Failure/Error: visit edit_admin_user_path(admin) URI::InvalidURIError: bad URI(is not URI?): # ./spec/requests/admin_spec.rb:54:in `block (2 levels) in ' 

rake routes我显示了很好的用户和酒店编辑路线:

 edit_admin_hotel GET /admin/hotels/:id/edit(.:format) admin/hotels#edit edit_admin_user GET /admin/users/:id/edit(.:format) admin/users#edit 

如果我启动服务器并手动检查它,一切正常。 所以我不知道这些问题来自哪里。 谢谢你的帮助! 和我的admin_spec.rb文件:

 require 'spec_helper' describe "Admin" do let(:admin) { FactoryGirl.create(:user) } let(:hotel) { FactoryGirl.create(:hotel) } before(:each) do sign_up_as_admin admin visit admin_hotels_path end subject { page } it { expect(page).to have_content("Manage Hotels") } it { expect(page).to have_content("Manage Users") } it { expect(page).to have_link("Sign out") } it { expect(page).to have_content("List of hotels") } it { expect(page).to have_content("Hello, Admin") } it "can add a hotel" do click_link "Add Hotel" expect(current_path).to eq(new_admin_hotel_path) fill_in 'name', with: "TestHotel" fill_in 'price', with: "666" fill_in 'star_rating', with: "5" expect { click_button "Submit" }.to change(Hotel,:count).by(1) expect(current_path).to eq(admin_hotel_path(1)) end it "can edit a hotel" do visit edit_admin_hotel_path(hotel) end it "can delete a hotel" do visit admin_hotel_path(hotel) expect { click_link "Delete hotel" }.to change(Hotel,:count).by(-1) #expect { click_link "Delete hotel" }.to redirect_to(admin_hotels_path) end it "can create a new user" do click_link "Add User" expect(current_path).to eq(new_admin_user_path) expect(page).to have_content("Create New User") fill_in "Name", :with => "user" fill_in "Email", :with => "user@auser.com" fill_in "Password", :with => "user.password" fill_in "password_confirmation", :with => "user.password" expect { click_button "Create User" }.to change(User,:count).by(1) expect(current_path).to eq(admin_users_path) end it "can edit a user" do visit edit_admin_user_path(admin) end end 

在users_controller.rb中编辑/更新操作:

 # GET admin/users/1/edit def edit @user = User.find(params[:id]) render "edit", status: 302 end # PATCH/PUT admin/users/1 def update @user = User.find(params[:id]) if @user.try(:update_attributes, user_params) render "edit", notice: 'User was successfully updated.' else render action: 'edit' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin) end 

和user / edit.html.erb:

  

Update profile

{ confirm: 'Are you sure?' }, method: :delete %>

更新1:我在测试编辑操作时发现这些bad URI(is not URI?)错误也在hotel_controller和comment_controller中。 编辑操作中我所有控制器中的这些错误,我不知道是什么让他们感到困惑:(

您的编辑操作错误:

 def edit @user = User.find(params[:id]) render "edit", status: 302 end 

302状态表示响应是重定向,并且响应中的Location标头包含要重定向到的URI(相对或绝对)。 Capybara将寻找这个标题,并可能最终试图做URI.parse(nil)

我不清楚你为什么要在这里设置状态

在您的spec_helper中,您是否包含了url_helpers?

 config.include Rails.application.routes.url_helpers