之前是Shoulda和RSpec

时间:2013-04-16 14:18:34

标签: ruby-on-rails testing rspec shoulda matcher

在测试模型字段的有效性之前,我尝试在主题中设置实例变量。我需要设置此变量,因为验证是有条件的(它仅用于某些类型的用户)。所以我有这样的事情:

  context "as a user" do

    before(:each) do
      subject = Organization.new
      subject.editor = "user"
    end

    it { subject.should validate_presence_of :name }

  end

但它没有按预期工作:

 Failure/Error: it { subject.should validate_presence_of :description }
 RuntimeError:
   Organization#editor attr is not set

我错过了什么?

1 个答案:

答案 0 :(得分:3)

前块中的

subject是局部变量。您似乎打算使用an explicit subject

context "as a user" do
  subject { Organization.new }

  before(:each) do
    subject.editor = "user"
  end

  # usually, you don't explicitly name the subject in an `it` like this
  it { should validate_presence_of :name }

end