On 30 Jul 2010, at 10:00 PM, nruth wrote: > http://gist.github.com/501296 > > I don't think anything needs to change, though a wrapper function > (each + an inner describe) might help flag it as a possible pitfall.
Hi Nick I think the "before + ivar" pattern (below) is on its way out. At least, I consider it deprecated in my head: describe "before" do before(:each) { @foo = "bar" } before(:each) { @foo = "baz" } it "does this" do @foo.should eq "baz" end end But the new syntax does indeed let you redefine `let` blocks. describe "let" do let(:foo) { "bar" } let(:foo) { "baz" } it "does this (currently)" do foo.should eq "baz" end end Arguably, this is not the most desirable behaviour, as it leads to silent/confusing failures, as you've seen. Maybe it would be better if this raised an error? (Which is only an option with `let`, not with ivars.) Also, when combined with shared examples, this could conceivably be used to violate the Liskov Substitution Principle (if the LSP applies to specs). While Ruby as a language lets you redefine stuff at will, I'm not sure that's appropriate here. I can't imagine wanting to redefine a let, instead of factoring it out properly. Anyone got any thoughts on that? Ash -- http://www.patchspace.co.uk/ http://www.linkedin.com/in/ashleymoran _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users