谁能给我解释一下这里出了什么问题。学习 RSpec - 我收到一个失败的测试消息 - 预期:“米勒”得到:零。我认为第二个“前 block ”只会将 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
您的问题:Hash#merge
返回一个新哈希,您需要 Hash#update
。
如何做得更好?这不仅是对测试的建议,也是对一般编程的建议:如果你更新和重用变量,你会遇到一些状态问题;采取更实用的方法。在这种特殊情况下,您应该使用 factory_girl或类似的 gem 可以轻松创建对象,而无需更新知道在哪里的 @valid_attributes
。
我是一名优秀的程序员,十分优秀!