我的rspec示例正在通过,即使我希望它失败

时间:2012-10-16 13:21:51

标签: ruby-on-rails-3 rspec

我无法弄清楚为什么我的第二个例子正在通过,即使它应该失败

这是我的person_spec.rb:

require 'spec_helper'

describe Person do
  it "must have a first name" do
    subject { Person.new(first_name: "", last_name: "Kowalski") }
    subject.should_not be_valid
  end

  it "must have a last name" do
    subject { Person.new(first_name: "Jan") }
    subject.should_not be_valid
  end
end

这是我的人.rb

class Person < ActiveRecord::Base
  attr_accessible :first_name, :last_name

  validates :first_name, presence: true

  def full_name
    return "#{@first_name}  #{@last_name}"
  end
end

我的rspec输出:

Person
  must have a last name
  must have a first name

Finished in 0.09501 seconds
2 examples, 0 failures

Randomized with seed 51711

更糟糕的是,我的进一步例子是以一种非常意外的方式失败/传递。看来我的主题似乎是Person的一个实例,但既没有first_name也没有last_name赋值

1 个答案:

答案 0 :(得分:1)

我认为你有两个主要问题。首先,如果我没有弄错,你应该在组范围内使用subject,但不能在实际规范中使用describe Array, "with some elements" do subject { [1,2,3] } it "should have the prescribed elements" do subject.should == [1,2,3] end end 。以下是rspec docs

中的一个示例
subject

请注意,itdescribe Person do it { should validate_presence_of(:first_name) } end 块之外声明。所以,我认为在这里看到一些意想不到的行为是合理的。我没有在这里挖掘源代码,但我有一种教育的感觉。

其次,通过跟随David Chelimsky的these guidelines可以大大简化您的规范。您的规范可能看起来更像这样:

{{1}}

更短,更甜,并且可能正常工作。