[英]How to set a parameter in rspec Cabybara test suite?
我的问题可能有多个答案。 我还是这个新手。
我想做的是路由到具有两个不同参数集的页面。
/users/2/edit?type=edit
/users/2/edit?type=password
当我亲自去那里时,我就能到达那里:
def edit
@edit_type = params[:type]
end
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<% if current_user.admin? and @edit_type == 'edit' %>
<%= f.label :username %>
<%= f.text_field :username %>
<% else%>
<% if current_user?(@user) %>
<%= f.label :curr_password, "Current Password" %>
<%= f.password_field :curr_password %>
<% end %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation %>
<% end %>
<%= f.submit "Save changes", class: "btn btn-lg btn-primary" %>
<% end %>
但是我如何通过Capybara从rspec到达那里呢?
describe "edit" do
let(:user) { FactoryGirl.create(:user) }
let(:admin) { FactoryGirl.create(:admin) }
describe "page" do
describe "as non-admin" do
before do
sign_in user
visit edit_user_path(user)
end
it { should have_content("Update Password") }
it { should have_title("Edit user") }
it { should_not have_content("Username") }
end
describe "as admin " do
# describe "visiting "
before do
sign_in admin
visit edit_user_path(user)
end
# These all fail because it doesn't go to the right site (type is empty)
it { should have_content("Update User Record") }
it { should have_title("Edit user") }
it { should find_field("Username") }
end
end
. . .
或者,可以/应该路由到此吗? 就像是:
/users/:id/edit/:type
我该怎么做? 我该如何测试
您只需将type
参数传递到路由帮助器中即可。 在您的管理员测试中:
visit edit_user_path(user)
应该是这样的:
visit edit_user_path(user, :type => "user")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.