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

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

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

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

Q&A

解決済

1回答

1391閲覧

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

mikiotake

総合スコア12

Ruby on Rails 6

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

0グッド

0クリップ

投稿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

1order_address_spec.rb 2require 'rails_helper' 3 4RSpec.describe OrderAddress, type: :model do 5 describe '配送先情報の保存' do 6 before do 7 item = FactoryBot.create(:item) 8 user = FactoryBot.create(:user) 9 @order_address = FactoryBot.build(:order_address,item_id: item.id,user_id: user.id) 10 end 11 12 context '内容に問題ない場合' do 13 it 'すべての値が正しく入力されていれば保存できること' do 14 expect(@order_address).to be_valid 15 end 16 it 'buildingは空でも保存できること' do 17 @order_address.building='' 18 expect(@order_address).to be_valid 19 end 20 end 21 22 context '内容に問題がある場合' do 23 it '郵便番号が必須であること。' do 24 @order_address.post_number= '' 25 @order_address.valid? 26 expect(@order_address.errors.full_messages).to include("Post number can't be blank", "Post number is invalid. Include hyphen(-)") 27 28 end 29 it ' 郵便番号は、「3桁ハイフン4桁」の半角文字列のみ保存可能なこと(良い例:123-4567 良くない例:1234567)。' do 30 @order_address.post_number='1234567' 31 @order_address.valid? 32 expect(@order_address.errors.full_messages).to include("Post number is invalid. Include hyphen(-)") 33 end 34 it '都道府県が必須であること。' do 35 @order_address.region_id= '' 36 @order_address.valid? 37 expect(@order_address.errors.full_messages).to include("Region can't be blank") 38 end 39 it '市区町村が必須であること。' do 40 @order_address.municipalities='' 41 @order_address.valid? 42 expect(@order_address.errors.full_messages).to include("Municipalities can't be blank") 43 end 44 it '番地が必須であること。' do 45 @order_address.address='' 46 @order_address.valid? 47 expect(@order_address.errors.full_messages).to include("Address can't be blank") 48 end 49 it '電話番号が必須であること。' do 50 @order_address.phone_number='' 51 @order_address.valid? 52 expect(@order_address.errors.full_messages).to include("Phone number can't be blank", "Phone number is invalid.") 53 54 end 55 it '電話番号は、10桁以上11桁以内の半角数値のみ保存可能なこと(良い例:09012345678 良くない例:090-1234-5678)' do 56 @order_address.phone_number='123456789234' 57 @order_address.valid? 58 expect(@order_address.errors.full_messages).to include("Phone number is invalid.") 59 end 60 it "priceが空では保存ができないこと" do 61 @order_address.price ='' 62 @order_address.valid? 63 expect(@order_address.errors.full_messages).to include("Price can't be blank") 64 end 65 it "tokenが空では登録できないこと" do 66 @order_address.token ='' 67 @order_address.valid? 68 expect(@order_address.errors.full_messages).to include("Token can't be blank") 69 end 70 end 71 end 72end 73 74 75### 試したこと 76 77ここに問題に対して試したことを記載してください。 78priceメソッドが定義されていないと思い 79order_address.rbファイルにassociation 80をitemを記載しました。 81 82### 補足情報(FW/ツールのバージョンなど) 83order_address.rb 84FactoryBot.define do 85 factory :order_address do 86 post_number{"157-0076"} 87 region_id{5} 88 municipalities{"北区"} 89 address{"青山1-1-1"} 90 building{"牧野ビル"} 91 phone_number{"09012190274"} 92 order_id{1} 93 price {"3000"} 94 token {"tok_abcdefghijk00000000000000000"} 95 end 96end 97 98ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

カリキュラムを見直して、tokenのテストコードができれば良いということでしたので
一度priceをmodelから削除をしたら正常に作動しました。

投稿2022/10/03 02:12

mikiotake

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問