mochi93kou
@mochi93kou (まるも)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

RspecでCapybaraを使ったテストが通らない

解決したいこと

ユーザーの住所登録のテストが通らず困っています。
テストユニットはrspecを使用しています。
住所登録画面で住所の自動入力のためjquery.postal.jsを使用しています。

郵便番号、県、市区町村、町域、を入力していますが、
入力できないは町域のみです。

発生している問題・エラー

     1.1) Failure/Error:
            expect {
              find('input[name="commit"]').click
            }.to change{ User.count }.by(1)
          
            expected `User.count` to have changed by 1, but was changed by 0

該当するソースコード

  describe 'ユーザー新規登録' do
    before do
      visit new_user_path
      fill_in 'user_address[name]', with: 'test' 
      fill_in 'user_address[email]', with: 'test@example.com' 
      fill_in 'user_address[password]', with: 'password' 
      fill_in 'user_address[password_confirmation]', with: 'password' 
      fill_in 'user_address[postcode]', with: '1111111'
      select  '東京都', from: 'user_address[prefecture]'
      fill_in 'user_address[city]', with: '台東区'
      fill_in 'user_address[house_number]', with: '123-3'
    end
    
    context '登録成功' do
      before do
        ActionMailer::Base.deliveries.clear
      end
      
      it '仮登録画面へ遷移' do
        expect {
          find('input[name="commit"]').click
        }.to change{ User.count }.by(1)
        expect(ActionMailer::Base.deliveries.size).to eq(1)
        expect(current_path).to eq('/users/done')
        user = User.last
        expect(user.activated).not_to eq be_truty
      end
    end

例)

jQuery(document).on('input', '#address_postcode', () => {
  $('#address_postcode').jpostal({
    postcode : [
      '#address_postcode'
    ],
    address: {
      "#address_prefecture": "%3",
      "#address_city": "%4",
      "#address_house_number": "%5%6%7",
    },
  })
})
end

自分で試したこと

      <div class="form-template">
        <%= f.label :house_number, "町域・番地", class:"form-label" %><p>[必須]</p>
        <div class="eg" >例:旭町1-1</div>
        <% if @user.errors.include?(:house_number) %>
          <div class="form-alert"><%= @user.errors.full_messages_for(:house_number).first %></div>
        <% end %>
        <%= f.text_field :house_number, class:"form-control", placeholder: "町域・番地", id: "address_house" %>
      </div>

ビューでidを変更して自動入力を無効にすると
テストは通ります。

以上になります。

お力をお貸しください。
よろしくお願いします。

0

1Answer

capybaraでchange記法って通りましたっけ

クリック処理が完了した後に expect(User.count).to eq 1 とか検証するとどうでしょう

0Like

Comments

  1. @mochi93kou

    Questioner

    回答ありがとうございます。
    返信が遅くなってしまい申し訳ありません。
    試してみましたが変わりなくダメでした。
  2. クリック後にsleepで少し待ってみるとか
  3. @mochi93kou

    Questioner

    ダメでした。
    jsファイルで
    "#address_house_number": "%5%6%7",

    "#address_house_number": "%4,
    に変更すると通るのですが何か関係あるのでしょうか。
    自動入力では市区町村が入力されてしましますが。。
  4. ちょっと分からないですが、クリックした時にエラーか何かで登録できてない可能性はないでしょうか

    スクリーンショットを撮るとか binding.pry で止めて調べてみるとか、ブラウザを起動させるモードで試してみても良いかも知れません
  5. @mochi93kou

    Questioner

    ありがとうございます。
    試してみます。

Your answer might help someone💌