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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

解決済

1回答

3413閲覧

モデルの単体テスト実装時のActiveSupportについて

taco

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2021/06/18 21:00

前提・実現したいこと

初学者です。
フリマアプリを作っています。
商品購入機能のモデルの単体テストコードを記述しているのですが、次のようなエラーメッセージが出ています。

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

エラーメッセージ Failure/Error: item = FactoryBot.create(:item) ActiveSupport::MessageVerifier::InvalidSignature: ActiveSupport::MessageVerifier::InvalidSignature

該当のソースコード

factoryBot

1FactoryBot.define do 2 factory :purchase_shopping do 3 token {"tok_abcdefghijk00000000000000000"} 4 postal_code {"111-1111"} 5 delivery_area_id {Faker::Number.between(from: 2, to: 48)} 6 city {Faker::Address.city} 7 house_number {Faker::Address.street_address} 8 building {"建物"} 9 phone_number {"0#{rand(0..9)}0#{rand(1_000_000..99_999_999)}"} 10 end 11end

rspec

1require 'rails_helper' 2 3RSpec.describe PurchaseShopping, type: :model do 4 before do 5 user = FactoryBot.create(:user) 6 item = FactoryBot.create(:item) 7 item.image = fixture_file_upload('public/image/output-image1.png') 8 purchase = Purchase.create(user_id: user.id, item_id: item.id) 9 @purchase_shopping = FactoryBot.build(:purchase_shopping, user_id: user.id, item_id: item.id, purchase_id: purchase.id) 10 end 11 context "内容に問題がない場合" do 12 it "tokenと住所情報等が適切に入力されていれば登録できる" do 13 expect(@purchase_shopping).to be_valid 14 end 15 end 16end

item

1FactoryBot.define do 2 factory :item do 3 image { Faker::Lorem.sentence } 4 name { Faker::Commerce.product_name } 5 introduce { Faker::Lorem.sentence } 6 category_id { Faker::Number.between(from: 2, to: 11) } 7 status_id { Faker::Number.between(from: 2, to: 7) } 8 pay_for_shopping_id { Faker::Number.between(from: 2, to: 3) } 9 delivery_area_id { Faker::Number.between(from: 2, to: 48) } 10 day_to_ship_id { Faker::Number.between(from: 2, to: 4) } 11 price { Faker::Number.between(from: 300, to: 9_999_999) } 12 association :user 13 end 14end 15

試したこと

同じようなエラーをググり、imageがうまく呼び込めていないことがわかりました。
item.image = fixture_file_upload('public/image/output-image1.png')
を記述したり、items.rbにimageを記述したりしました。なお、テストコードはまだ作成中なので途中段階です。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

before do
user = FactoryBot.create(:user)
item = FactoryBot.create(:item)
@purchase_shopping = FactoryBot.build(:purchase_shopping, user_id: user.id, item_id: item.id)
end

とし、

items,rbに
after(:build) do |message|
message.image.attach(io: File.open('public/images/output-image1.png'), filename: 'test_image.png')
end

を記述すると解決しました。

投稿2021/06/19 02:47

taco

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問