我无法弄清楚为什么我的第二个例子正在通过,即使它应该失败
这是我的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赋值
答案 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
请注意,it
在describe Person do
it { should validate_presence_of(:first_name) }
end
块之外声明。所以,我认为在这里看到一些意想不到的行为是合理的。我没有在这里挖掘源代码,但我有一种教育的感觉。
其次,通过跟随David Chelimsky的these guidelines可以大大简化您的规范。您的规范可能看起来更像这样:
{{1}}
更短,更甜,并且可能正常工作。