RSpecを用いた単体テストの具体例 @TECH CAMP #26
どうも、とだです!
以前書いた以下の記事が自分の記事の中で人気なんですが、なんとgoogleで「RSpec 単体テスト」と検索すると一番上に来るようになりました!!
お世辞にもメジャーなキーワードでの検索とは言えませんが、おかげでそれなりの人の目にとまるようになったことは嬉しいです。今回は、この記事に付け加える形で、テストコードの具体例を列挙しようと思います。
前提
今回もフリマアプリなどECサイトのクローンサイトの制作など、Webアプリケーションを制作していることが前提になります。
フラッシュメッセージやエラーメッセージを日本語化すると、テストコードの中のエクスペクテーションにも日本語で書かなければいけない部分が出てきます。
ユーザーに新規登録してもらう時のバリデーションに関するテスト その1
前回紹介したテストコードとほとんど一緒ですが、日本語にしなければならない部分に違いがあるので、そこに注目していただけるといいと思います。
今回入力してもらうカラムは「ニックネーム」「eメール」「氏名」「氏名(カナ)」「誕生日」「パスワード(7文字以上)」です。
require 'rails_helper'
describe User do
describe '#create' do
# 1
it "nikcnameがない場合は登録できないこと" do
user = build(:user, nickname: nil)
user.valid?
expect(user.errors[:nickname]).to include("を入力してください")
end
# 2
it "emailがない場合は登録できないこと" do
user = build(:user, email: nil)
user.valid?
expect(user.errors[:email]).to include("は不正な値です", "を入力してください")
end
# 3
it "first_nameがない場合は登録できないこと" do
user = build(:user, first_name: nil)
user.valid?
expect(user.errors[:first_name]).to include("は不正な値です", "を入力してください")
end
# 4
it "last_nameがない場合は登録できないこと" do
user = build(:user, last_name: nil)
user.valid?
expect(user.errors[:last_name]).to include("は不正な値です", "を入力してください")
end
# 5
it "first_name_kanaがない場合は登録できないこと" do
user = build(:user, first_name_kana: nil)
user.valid?
expect(user.errors[:first_name_kana]).to include("は不正な値です", "を入力してください")
end
# 6
it "last_name_kanaがない場合は登録できないこと" do
user = build(:user, last_name_kana: nil)
user.valid?
expect(user.errors[:last_name_kana]).to include("は不正な値です", "を入力してください")
end
# 7
it "birthdayがない場合は登録できないこと" do
user = build(:user, birthday: nil)
user.valid?
expect(user.errors[:birthday]).to include("を入力してください")
end
# 8
it "passwordが存在してもpassword_confirmationがない場合は登録できないこと" do
user = build(:user, password_confirmation: "")
user.valid?
expect(user.errors[:password_confirmation]).to include("とパスワードの入力が一致しません")
end
# 9
it " 重複したemailが存在する場合は登録できないこと " do
user = create(:user)
another_user = build(:user, email: user.email)
another_user.valid?
expect(another_user.errors[:email]).to include("はすでに存在します")
end
# 10
it " passwordが7文字以上であれば登録できること " do
user = build(:user, password: "1234567", password_confirmation: "1234567")
expect(user).to be_valid
end
# 11
it " passwordが6文字以下であれば登録できないこと " do
user = build(:user, password: "123456", password_confirmation: "123456")
user.valid?
expect(user.errors[:password]).to include("は7文字以上で入力してください")
end
# 12
it "nicknameとemail、passwordとpassword_confirmation、first_name、last_name、first_name_kana、last_name_kana、birthdayが存在すれば登録できること" do
user = build(:user)
expect(user).to be_valid
end
end
end
要は期待されるレスポンスも日本語でなければいけないということです。
ユーザーに新規登録してもらう時のバリデーションに関するテスト その2
続いて住所登録をしてもらうという過程で「送付先住所の代表者名(漢字とカナ)」「郵便番号」「都道府県」「市区町村」「番地」を入力してもらいます。
※都道府県に関してはactive_hashを用いて、入力フォームではプルダウンメニューになっていて洗濯してもらう形式になっていて、送られる値はprefecture_idとなっています。
require 'rails_helper'
describe Address do
describe '#create' do
# 1
it "destination_first_nameがない場合は登録できないこと" do
address = build(:address, destination_first_name: nil)
address.valid?
expect(address.errors[:destination_first_name]).to include("を入力してください")
end
# 2
it "destination_last_nameがない場合は登録できないこと" do
address = build(:address, destination_last_name: nil)
address.valid?
expect(address.errors[:destination_last_name]).to include("を入力してください")
end
# 3
it "destination_first_name_kanaがない場合は登録できないこと" do
address = build(:address, destination_first_name_kana: nil)
address.valid?
expect(address.errors[:destination_first_name_kana]).to include("を入力してください")
end
# 4
it "destination_last_name_kanaがない場合は登録できないこと" do
address = build(:address, destination_last_name_kana: nil)
address.valid?
expect(address.errors[:destination_last_name_kana]).to include("を入力してください")
end
# 5
it "postal_codeがない場合は登録できないこと" do
address = build(:address, postal_code: nil)
address.valid?
expect(address.errors[:postal_code]).to include("を入力してください")
end
# 6
it "prefecture_idがない場合は登録できないこと" do
address = build(:address, prefecture_id: nil)
address.valid?
expect(address.errors[:prefecture_id]).to include("を入力してください")
end
# 7
it "cityがない場合は登録できないこと" do
address = build(:address, city: nil)
address.valid?
expect(address.errors[:city]).to include("を入力してください")
end
# 8
it "blockがない場合は登録できないこと" do
address = build(:address, block: nil)
address.valid?
expect(address.errors[:block]).to include("を入力してください")
end
# 9
it "destination_first_name、destination_last_name、destination_first_name_kana、destination_last_name_kana、postal_code、prefecture_id、city、block全てが存在すれば登録できること" do
address = build(:address)
expect(address).to be_valid
end
end
end
ここもほとんど変わらず、カラム名などを変えればいいだけですね。
SNS認証を導入した際の(簡単な)バリデーションに関するテスト
OmniAuthを用いたSNS認証を導入した際に、バリデーションに関するテストを記述したので紹介します。
※「uid」はSNS側のユーザーIDのことで、「user_id」は制作している側のユーザーIDのことを指します。
require 'rails_helper'
RSpec.describe SnsCredential, type: :model do
# 1
it "provider、uid、user_idが全て入っていれば登録できること" do
sns = build(:sns_credential)
expect(sns).to be_valid
end
# 2
it "uidがなければ登録できないこと" do
sns = build(:sns_credential, uid: nil)
sns.valid?
expect(sns.errors[:uid]).to include()
end
# 3
it "providerがなければ登録できないこと" do
sns = build(:sns_credential, provider: nil)
sns.valid?
expect(sns.errors[:provider]).to include()
end
# 4
it "user_idがなければ登録できないこと" do
sns = build(:sns_credential, user_id: nil)
sns.valid?
expect(sns.errors[:user_id]).to include()
end
# 5
it "同じuidは登録できないこと" do
sns = build(
:sns_credential,
uid: "123",
provider: "facebook",
user_id: 1
)
sns_another = build(
:sns_credential,
uid: "123",
provider: "facebook",
user_id: 2
)
expect(sns_another.errors[:uid]).to include()
end
# 6
it "uidが違う場合は、同じproviderでも登録できること" do
sns = build(
:sns_credential,
uid: "123",
provider: "facebook",
user_id: 1
)
sns_another = build(
:sns_credential,
uid: "456",
provider: "facebook",
user_id: 2
)
expect(sns).to be_valid
expect(sns_another).to be_valid
end
end
商品を出品および編集する際のバリデーションに関するテスト
商品を出品するとき、および編集(update)するときに入力してもらうフォームに関するバリデーションがうまくいくかどうかのテストです。
require 'rails_helper'
describe Item do
describe '#create' do
#1
it "nameがない場合は登録できないこと" do
item = build(:item, name: nil)
item.valid?
expect(item.errors[:name]).to include("を入力してください")
end
#2
it "explainがない場合は登録できないこと" do
item = build(:item, explain: nil)
item.valid?
expect(item.errors[:explain]).to include("を入力してください")
end
#3
it "category_idがない場合は登録できないこと" do
item = build(:item, category_id: nil)
item.valid?
expect(item.errors[:category_id]).to include("を入力してください")
end
#4
it "shipping_burden_idがない場合は登録できないこと" do
item = build(:item, shipping_burden_id: nil)
item.valid?
expect(item.errors[:shipping_burden_id]).to include("を入力してください")
end
#5
it "prefecture_idがない場合は登録できないこと" do
item = build(:item, prefecture_id: nil)
item.valid?
expect(item.errors[:prefecture_id]).to include("を入力してください")
end
#6
it "shipping_day_idがない場合は登録できないこと" do
item = build(:item, shipping_day_id: nil)
item.valid?
expect(item.errors[:shipping_day_id]).to include("を入力してください")
end
#7
it "priceがない場合は登録できないこと" do
item = build(:item, price: nil)
item.valid?
expect(item.errors[:price]).to include("を入力してください")
end
#8
it "nameが40文字でも登録できること" do
user = create(:user)
category = create(:category)
item = build(:item, name: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
#9
it "nameが41文字だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item, name: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item.errors[:name]).to include("文字数が多すぎます")
end
#10
it "explainが1000文字でも登録できること" do
user = create(:user)
category = create(:category)
item = build(:item, explain: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
#11
it "explainが1001文字だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item, explain: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item.errors[:explain]).to include("文字数が多すぎます")
end
#12
it "priceが299以下だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item, price: "299",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item.errors[:price]).to include("値段は300円以上10000000円未満を設定してください")
end
#13
it "priceが300ちょうどだと登録できる" do
user = create(:user)
category = create(:category)
item = build(:item, price: "300",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
#14
it "priceが9999999だと登録できる" do
user = create(:user)
category = create(:category)
item = build(:item, price: "9999999",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
#15
it "priceが10000000だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item, price: "10000000",seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item.errors[:price]).to include("値段は300円以上10000000円未満を設定してください")
end
#16
it "必須項目が全てあれば登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
end
describe '#update' do
#1
it "必須項目が全てあれば登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
expect(item).to be_valid
end
#2
it "nameがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.name = nil
expect(item.errors[:name]).to include()
end
#3
it "explainがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.explain = nil
expect(item.errors[:explain]).to include()
end
#4
it "category_idがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.category_id = nil
expect(item.errors[:category_id]).to include()
end
#5
it "shipping_burden_idがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.shipping_burden_id = nil
expect(item.errors[:shipping_burden_id]).to include()
end
#6
it "prefecture_idがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.prefecture_id = nil
expect(item.errors[:prefecture_id]).to include()
end
#7
it "shipping_day_idがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.shipping_day_id = nil
expect(item.errors[:shipping_day_id]).to include()
end
#8
it "priceがない場合は登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.price = nil
expect(item.errors[:price]).to include()
end
#9
it "nameが40文字でも登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.name = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
expect(item).to be_valid
end
#10
it "nameが41文字だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.name = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
expect(item.errors[:name]).to include()
end
#11
it "explainが1000文字でも登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.explain = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
expect(item).to be_valid
end
#12
it "explainが1001文字だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.explain = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
expect(item.errors[:explain]).to include()
end
#13
it "priceが299以下だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.price = "299"
expect(item.errors[:price]).to include("値段は300円以上10000000円未満を設定してください")
end
#14
it "priceが300ちょうどだと登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.price = "300"
expect(item).to be_valid
end
#15
it "priceが9999999だと登録できること" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.price = "9999999"
expect(item).to be_valid
end
#16
it "priceが10000000だと登録できないこと" do
user = create(:user)
category = create(:category)
item = build(:item,seller_id: user[:id],seller_id: user[:id], category_id: category[:id])
item.price = "10000000"
expect(item.errors[:price]).to include("値段は300円以上10000000円未満を設定してください")
end
end
end
商品を紹介するフォームに入力する文字が1000文字のところはもっと上手い書き方があれば教えていただきたいです…。
商品名の長さや値段設定などの部分は境界値のテストとしていくつか書かないといけませんが、ほぼコピペできるので見た目ほど面倒ではありません。
以上具体例でした。どなたかの参考になれば嬉しいです。また、間違いや改善点があればコメントして頂けると嬉しいです!