最后绕过一本关于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)>'
如果我删除了模型中标有星号的行,那么测试通过了,但那些行的测试是否失败?
答案 0 :(得分:3)
正是它所说的 - 您正在创建一个没有关联Park的过山车,因此对park.name
的调用失败。
这意味着验证还可以确保该模型有一个slu ..