RSpec/Shoulda:"should be_valid"失败,"contact.should be_valid"通过

Jos*_*eim 2 ruby validation rspec ruby-on-rails

我有以下规格:

  context "no firstname present" do
    let(:contact) { build :contact, firstname: 'Mickey', lastname: '', companyname: '' }
    it "should be valid" do
      should be_valid # Does not work
      contact.should be_valid # Works
    end
  end
Run Code Online (Sandbox Code Playgroud)

为什么should be_valid失败,但contact.should be_valid通过?在it街区内,无论如何should be_valid应该访问contact?!谢谢你的澄清.

mra*_*ruz 11

你可以用 subject

context "no firstname present" do
  let(:contact) { build :contact, firstname: 'Mickey', lastname: '', companyname: '' }
  subject { contact }
  it { should be_valid }
end
Run Code Online (Sandbox Code Playgroud)

编辑

我刚刚发现its [link]这是subject测试发送给它的属性或测试消息的好方法