Rails アプリでのテストを学び始めており、rSpec と Shoulda を使用しています。
私は動作する次のテストを持っています:
it { should respond_to(:park_name) }
しかし、私が理解していないのは、これが実行されているのは何ですか? これはモデル自体またはモデルのインスタンスで実行されていますか?それがモデルのインスタンスである場合、Factory Girl ファクトリを自動的に使用しますか?
ここで実際に何が起こっているかについての簡単な説明はありますか?
アップデート:
わかりました、だから私はこれを持っています:
describe 'validations' do
subject { FactoryGirl.build(:coaster) }
it { should validate_presence_of(:name) }
it { should validate_presence_of(:speed) }
it { should validate_presence_of(:height) }
end
しかし、テストは失敗しています。何か案は?
Coaster.rb:
class Coaster < ActiveRecord::Base
extend FriendlyId
friendly_id :slug, use: :slugged
belongs_to :park
belongs_to :manufacturer
attr_accessible :name,
:height,
:speed,
:length,
:inversions,
:material,
:lat,
:lng,
:park_id,
:notes,
:manufacturer_id,
:style,
:covering,
:ride_style,
:model,
:layout,
:dates_ridden,
:times_ridden,
:order,
:on_ride_photo
scope :by_name_asc, lambda {
order("name ASC")
}
scope :made_from, lambda { |material|
where("material = ?", material)
}
scope :wooden, lambda {
made_from "wood"
}
scope :steel, lambda {
made_from "steel"
}
delegate :name, :location_1, :location_2, :location_3, :location_4,
to: :park,
allow_nil: true,
prefix: true
delegate :name, :url,
to: :manufacturer,
prefix: true
validates :name,
:presence => true
validates :height,
allow_nil: true,
numericality: {greater_than: 0}
validates :speed,
allow_nil: true,
numericality: {greater_than: 0}
validates :length,
allow_nil: true,
numericality: {greater_than: 0}
試験結果:
1) コースターの検証では、速度を設定する必要があります 失敗/エラー: it { should validate_presence_of(:speed) } /coaster_spec.rb:75:in `ブロック (3 レベル) in '
2) Coaster の検証では、高さを設定する必要があります 失敗/エラー: it { should validate_presence_of(:height) } /coaster_spec.rb:76:in `ブロック (3 レベル) in '
同様の質問:
私はこのテストを持っています:
describe 'methods' do
subject { FactoryGirl.build(:coaster) }
it "should return a formatted string of coaster name at park name" do
name_and_park.should eq('Nemesis at Alton Towers')
end
end
Coaster.rb:
def name_and_park
[name, park.name].join (' at ')
end
テスト実行時のエラー:
2) コースター メソッドは、公園名のコースター名の書式設定された文字列を返す必要があります
name_and_park' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_6:0x007f84f4161798> # ./spec/models/coaster_spec.rb:111:in
。
name_and_park を呼び出すことはできませんが、そのメソッドは、件名で作成されている Coaster のインスタンスで呼び出す必要がありますか? いいえ?