rspec和第一次测试试验

时间:2013-07-20 15:52:18

标签: ruby-on-rails testing 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)>'

如果我删除了模型中标有星号的行,那么测试通过了,但那些行的测试是否失败?

1 个答案:

答案 0 :(得分:3)

正是它所说的 - 您正在创建一个没有关联Park的过山车,因此对park.name的调用失败。

这意味着验证还可以确保该模型有一个slu ..