0
終於開始工作,通過一本關於rspec的書,並在緩慢構建它之前對我的一個模型執行一些簡單的測試。rspec和第一次測試試驗
我的模型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,
default_scope :order => 'name ASC'
delegate :name, :city, :region, :country, to: :park, allow_nil: true, prefix: true
delegate :name, :url, to: :manufacturer, prefix: true
validates :name, :presence => true
validates :speed,
:allow_nil => true,
:numericality => {:greater_than => 0}
*def name_and_park
* "#{name} at #{park.name}"
*end
*def slug
* name_and_park.parameterize
*end
end
我的第一個簡單的測試:
describe Coaster do
it 'is valid with a name' do
coaster = Coaster.new(
name: 'Collin'
)
expect(coaster).to be_valid
end
end
,結果運行測試時,我得到:
1) Coaster is valid with a name
Failure/Error: expect(coaster).to be_valid
NoMethodError:
undefined method `name' for nil:NilClass
# ./app/models/coaster.rb:65:in `name_and_park'
# ./app/models/coaster.rb:69:in `slug'
# ./spec/models/coaster_spec.rb:9:in `block (2 levels) in <top (required)>'
如果我刪除模型中標有星號的線條,那麼測試通過,但那些線條呢? s沒有通過測試?
爲了從過山車上獲得公園,我只是做了coaster.park_name,因爲我在代表上設置了前綴爲true。我在猜測,根據你所說的,爲了正確編寫測試,我需要確保我在測試中創建的杯墊有一個公園,然後測試杯墊的名稱? – rctneil
@ rctneil哦,我錯過了你會設置':prefix',對不起。但是,是的,因爲沒有公園,那條線會失敗。所以我猜想,slu is是模型驗證的一部分。 –