スキルアップのために、Michael Hartl の Rails チュートリアルに従って自分用の小さなアプリを作成しています。
ええと、私にとって最大の難点は TDD です...少し慣れてきましたが、この時点で小さな問題に直面しています。モデルの 1 つにパーセンテージである多くの属性があるため、多くの反復テストがあります。 .
モデル スペック ファイルのこれらの属性のテストをそのままリファクタリングしました。
describe Measure do
let(:user) { FactoryGirl.create(:user) }
before do
@measure = user.measures.build(
fat: 35.0,
water: 48.0,
muscle: 25.5,
bmi: 33.0
)
end
subject { @measure }
describe 'validations' do
describe 'percentage attributes validations' do
percentages = %w[bmi fat muscle water]
percentages.each do |percentage|
describe "#{percentage} should be a number" do
before { @measure.send("#{percentage}=".to_sym, 'value') }
it { should_not be_valid }
end
end
percentages.each do |percentage|
describe "#{percentage} should be positive" do
before { @measure.send("#{percentage}=".to_sym, -1) }
it { should_not be_valid }
end
end
percentages.each do |percentage|
describe "#{percentage} should be less or equal to 100" do
before { @measure.send("#{percentage}=".to_sym, 100.01) }
it { should_not be_valid }
end
end
end
end
end
しかし、これもかなり長いので、Rails チュートリアルの第 8 章で紹介されている RSspec Custom Matcher を作成するのは良い考えだと思いました。
だから私はこのようにテストを書くことができるように感じました
describe 'percentage attributes validations' do
its(:bmi) { should be_a_percentage }
end
be_a_percentage
カスタムマッチャーで。しかし、それを実装する方法がわからないので、私は立ち往生しています...これまでのところ、私は持っています:
RSpec::Matchers.define :be_a_percentage |percentage| do
match |measure| do
# What should I do ?
# percentage is nil and number is the attribute value
# I can't call be_valid on the Measure object
end
end
別の電話をかけてみました
describe 'percentage attributes validations' do
specify { @measure.bmi.should be_a_percentage }
end
カスタム マッチャー チェーンに関する情報を読みましたが、理解できません。
初投稿です、長くなってしまいましたがよろしくお願いします…