有人可以向我解释这里有什么问题。学习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
答案 0 :(得分:4)
您的问题:Hash#merge
会返回一个新哈希值,您需要Hash#update
。
如何做得更好?这不仅仅是一个测试建议,而是一般的编程:如果你更新和重用变量,你会遇到状态问题;采取更实用的方法。在这种特殊情况下,您应该使用factory_girl或类似的gem轻松创建对象,而无需更新@valid_attributes
谁知道在哪里。