RSpec属性哈希

时间:2011-12-13 16:07:08

标签: ruby rspec

有人可以向我解释这里有什么问题。学习RSpec - 我收到一个失败的测试信息 - 预计:“米勒”得到:零。我认为第二个'在块之前'只会将middle_name与原始的@valid_attributes合并。这样做的正确方法是什么。我知道我可以简单地说p.middle_name来分配它,但我正在尝试学习RSpec的概念。

describe Person do
  describe "Validations" do
    subject { p }
    before { @valid_attributes={first_name: "Joe", last_name: "Sample"} }

    ...

    context "with optional middle name" do
      let(:p) { Person.new(@valid_attributes) }
      before { @valid_attributes.merge({middle_name: "Miller"}) }

      its(:middle_name) { should eq("Miller") }
    end
  end
end

1 个答案:

答案 0 :(得分:4)

  1. 您的问题:Hash#merge会返回一个新哈希值,您需要Hash#update

  2. 如何做得更好?这不仅仅是一个测试建议,而是一般的编程:如果你更新和重用变量,你会遇到状态问题;采取更实用的方法。在这种特殊情况下,您应该使用factory_girl或类似的gem轻松创建对象,而无需更新@valid_attributes谁知道在哪里。