Tag Archives: subject

rspec 中 let 和 subject 的区别

let 和 subject 很像,同出一源,都是通过委托来定义一个消息的接收方,这句话的意思可以理解成:为某个方法调用(此调用的结果是一个对象,这一点毋庸置疑,因为一切都是对象)绑定一个“名字”(一般用 symbol),于是在后面的测试样例中,我们可以用这个名字来指代它。最直接的好处就是可以让代码更精炼,提高可读性,减少重复。 说它们同出一源,可以通过源码获知: def let(name, &block) ::RSpec::Core::MemoizedHelpers.module_for(self).define_method(name, &block) define_method(name) do __memoized.fetch(name) { |k| __memoized[k] = super() } end end 简单地说,我们传递了 name 和 &block 给 let,于是返回给我们一个 defined method;再看 subject: def subject(name=nil, &block) let(:subject, &block) alias_method name, :subject if … Continue reading

Posted in ruby on rails | Tagged , , | Leave a comment