一部は、このフォームフィールドから大学を選択する必要があります。ここではカピバラアクション整数(ID)対文字列(名前)混乱
<div class="js-dependent-fields" data-select-id="user_role" data-option-value="staff">
<div class="form-group">
<%= form.label :university %>
<%= form.select :university_id, options_for_select(University.all.map{ |uni| [uni.name, uni.id] }), {prompt: 'Select Your University'}, { class: "form-control" } %>
</div>
</div>
は、実際のHTMLです:
ここ<div class="js-dependent-fields" data-select-id="user_role" data-option-value="staff">
<div class="form-group">
<label for="user_university">University</label>
<select class="form-control" name="user[university_id]" id="user_university_id"><option value="">Select Your University</option>
<option value="1">Harvard</option></select>
</div>
私が得るエラーです:
test_signup_valid_user ERROR (0.05s)
Capybara::ElementNotFound: Capybara::ElementNotFound: Unable to find visible option "Harvard University"
test/integration/boarding_flow_test.rb:63:in `block in <class:BoardingFlowTest>'
フォームが送信されるとき、これはパラメータの一部として渡すものの例です以下の試験で
"university_id"=>"4"
私が大学を選択したい、と私は私のようなものと考えることができ、すべての組み合わせを試してみた:
page.select "3", from: "university_id"
page.select "Harvard University", from: "University"
をしかし、私はそれを動作させるように見えることはできません。これを行う適切な方法は何ですか?ありがとう!ここで
test 'signup valid user' do
visit sign_up_path
fill_in "First name", with: "John"
fill_in "Last name", with: "Doe"
fill_in "Email", with: "[email protected]"
fill_in "Password", with: "foobar"
page.select "Staff", from: "Role"
page.select "3", from: "university_id"
click_on "Signup"
assert_equal sign_in_path, current_path
assert page.has_content?("confirm your email")
end
は、ここでユーザー/ new.html.erb
<div class="row">
<div class="col-sm-8 col-md-4 col-sm-offset-2 col-md-offset-4">
<div class="login-panel panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Signup</h3>
</div>
<div class="panel-body">
<%= form_for @user do |form| %>
<fieldset>
<%= render partial: '/users/form', object: form %>
<%= form.submit t(".submit"), class: "btn btn-md btn-success btn-block" %>
<hr>
<h5 class="text-center">Already have an account?</h5>
<%= link_to t(".login"), sign_in_path, class: "btn btn-md btn-info btn-block" %>
</fieldset>
<% end %>
</div>
</div>
</div>
</div>
である部分の形だ
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: "form-control" %>
</div>
<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: "form-control" %>
</div>
<div class="form-group">
<%= form.label :email %>
<%= form.text_field :email, type: 'email', class: "form-control" %>
</div>
<div class="form-group">
<%= form.label :password %>
<%= form.password_field :password, class: "form-control" %>
</div>
<div class="form-group">
<%= form.label :role %>
<%= form.select :role, options_for_select(User.roles.keys.map{ |role| [User.human_attribute_name("role.#{role}"), role] }), {}, { class: "form-control" } %>
</div>
<div class="js-dependent-fields" data-select-id="user_role" data-option-value="staff">
<div class="form-group">
<%= form.label :university %>
<%= form.select :university_id, options_for_select(University.all.map{ |uni| [uni.name, uni.id] }), {prompt: 'Select Your University'}, { class: "form-control" } %>
</div>
</div>
FYI - これはあなたの現在の問題ではありませんが、 'assert_equal'と' assert'ではなくCapybaraが提供するアサーションを使用する必要があります。カピバラは、不安定なテストを防ぐために、アサーションに待機/再試行の動作を提供しました。 'assert page.has_content?(...)'の代わりに 'assert_equal ...'と 'assert_content("あなたの電子メールを確認する) "の代わりに' assert_current_path(sign_in_path) 'を返します –