質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

解決済

単体テストコードについて

mikiotake
mikiotake

総合スコア12

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1回答

0リアクション

0クリップ

205閲覧

投稿2022/10/03 01:33

前提

ここに質問の内容を詳しく書いてください。
ruby on rails でfurima appの商品購入機能についてテストコードを作成しています。
pay.jpを使用したため、itemのpriceとtokenが空では保存できないというコードを追記したいです。
テストコードでエラーが生じたためどのように修正すればよいか教えていただきたいです。

実現したいこと

・テストコードが正常に作動する。

発生している問題・エラーメッセージ

OrderAddress
配送先情報の保存
内容に問題ない場合
すべての値が正しく入力されていれば保存できること (FAILED - 1)
buildingは空でも保存できること (FAILED - 2)
内容に問題がある場合
郵便番号が必須であること。 (FAILED - 3)
郵便番号は、「3桁ハイフン4桁」の半角文字列のみ保存可能なこと(良い例:123-4567 良くない例:1234567)。 (FAILED - 4)
都道府県が必須であること。 (FAILED - 5)
市区町村が必須であること。 (FAILED - 6)
番地が必須であること。 (FAILED - 7)
電話番号が必須であること。 (FAILED - 8)
電話番号は、10桁以上11桁以内の半角数値のみ保存可能なこと(良い例:09012345678 良くない例:090-1234-5678) (FAILED - 9)
priceが空では保存ができないこと (FAILED - 10)
tokenが空では登録できないこと (FAILED - 11)

Failures:

  1. OrderAddress 配送先情報の保存 内容に問題ない場合 すべての値が正しく入力されていれば保存できること
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae87735248

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  2. OrderAddress 配送先情報の保存 内容に問題ない場合 buildingは空でも保存できること
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae671df0c0

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  3. OrderAddress 配送先情報の保存 内容に問題がある場合 郵便番号が必須であること。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae67491700

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  4. OrderAddress 配送先情報の保存 内容に問題がある場合 郵便番号は、「3桁ハイフン4桁」の半角文字列のみ保存可能なこと(良い例:123-4567 良くない例:1234567)。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae874753c8

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  5. OrderAddress 配送先情報の保存 内容に問題がある場合 都道府県が必須であること。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae8748c168

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  6. OrderAddress 配送先情報の保存 内容に問題がある場合 市区町村が必須であること。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae875555b8

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  7. OrderAddress 配送先情報の保存 内容に問題がある場合 番地が必須であること。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae67924ec0

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  8. OrderAddress 配送先情報の保存 内容に問題がある場合 電話番号が必須であること。
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae8764df60

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  9. OrderAddress 配送先情報の保存 内容に問題がある場合 電話番号は、10桁以上11桁以内の半角数値のみ保存可能なこと(良い例:09012345678 良くない例:090-1234-5678)
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae679fe440

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  10. OrderAddress 配送先情報の保存 内容に問題がある場合 priceが空では保存ができないこと
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae877542b0

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

  11. OrderAddress 配送先情報の保存 内容に問題がある場合 tokenが空では登録できないこと
    Failure/Error: @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id)

    NoMethodError:
    undefined method `price=' for #OrderAddress:0x00007fae560494d8

    ./spec/models/order_address_spec.rb:8:in `block (3 levels) in <top (required)>'

該当のソースコード

ruby

order_address_spec.rb require 'rails_helper' RSpec.describe OrderAddress, type: :model do describe '配送先情報の保存' do before do item = FactoryBot.create(:item) user = FactoryBot.create(:user) @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id) end context '内容に問題ない場合' do it 'すべての値が正しく入力されていれば保存できること' do expect(@order_address).to be_valid end it 'buildingは空でも保存できること' do @order_address.building='' expect(@order_address).to be_valid end end context '内容に問題がある場合' do it '郵便番号が必須であること。' do @order_address.post_number= '' @order_address.valid? expect(@order_address.errors.full_messages).to include("Post number can't be blank", "Post number is invalid. Include hyphen(-)") end it ' 郵便番号は、「3桁ハイフン4桁」の半角文字列のみ保存可能なこと(良い例:123-4567 良くない例:1234567)。' do @order_address.post_number='1234567' @order_address.valid? expect(@order_address.errors.full_messages).to include("Post number is invalid. Include hyphen(-)") end it '都道府県が必須であること。' do @order_address.region_id= '' @order_address.valid? expect(@order_address.errors.full_messages).to include("Region can't be blank") end it '市区町村が必須であること。' do @order_address.municipalities='' @order_address.valid? expect(@order_address.errors.full_messages).to include("Municipalities can't be blank") end it '番地が必須であること。' do @order_address.address='' @order_address.valid? expect(@order_address.errors.full_messages).to include("Address can't be blank") end it '電話番号が必須であること。' do @order_address.phone_number='' @order_address.valid? expect(@order_address.errors.full_messages).to include("Phone number can't be blank", "Phone number is invalid.") end it '電話番号は、10桁以上11桁以内の半角数値のみ保存可能なこと(良い例:09012345678 良くない例:090-1234-5678)' do @order_address.phone_number='123456789234' @order_address.valid? expect(@order_address.errors.full_messages).to include("Phone number is invalid.") end it "priceが空では保存ができないこと" do @order_address.price ='' @order_address.valid? expect(@order_address.errors.full_messages).to include("Price can't be blank") end it "tokenが空では登録できないこと" do @order_address.token ='' @order_address.valid? expect(@order_address.errors.full_messages).to include("Token can't be blank") end end end end ### 試したこと ここに問題に対して試したことを記載してください。 priceメソッドが定義されていないと思い order_address.rbファイルにassociation をitemを記載しました。 ### 補足情報(FW/ツールのバージョンなど) order_address.rb FactoryBot.define do factory :order_address do post_number{"157-0076"} region_id{5} municipalities{"北区"} address{"青山1-1-1"} building{"牧野ビル"} phone_number{"09012190274"} order_id{1} price {"3000"} token {"tok_abcdefghijk00000000000000000"} end end ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。