以下(rspec)代码行之间有什么区别,无论它们是相同还是不同,何时使用一个而不是另一个?
book = double("book")
allow(book).to receive(:title) { "The RSpec Book" }
Run Code Online (Sandbox Code Playgroud)
与
book = double("book")
book.stub(:title).and_return("The RSpec Book")
Run Code Online (Sandbox Code Playgroud)
jur*_*lic 35
有2个不同,但结果完全相同.两者都与rspec模拟/期望语法有关.
使用#allow代替#stub方法.第一种情况使用今年推出的新rspec语法.现在这是使用rspec的首选方式.尽管旧语法没有被弃用,但在rspec3中默认情况下可能会禁用它.关于这个主题的更多信息来自rspec的维护者:http : //myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax http://myronmars.to/n/dev-blog/ 2013/07 /的计划换rspec的-3
使用块而不是#and_return来定义返回值.这与提到的语法更改无关; 这两种方法已经有很长一段时间了(因为rspec 1).使用#and_return方法更合适,因为它是(a)默认方式,(b)更具可读性,(c)没有任何运行时开销.使用块的第二种方法通常保留给角落情况,当你希望返回更具动态性的东西时 - 不是常数,而是某种计算.
您的问题的答案是使用两者的组合:
例如:
book = double('book')
allow(book).to receive(:title).and_return('The RSpec Book')
Run Code Online (Sandbox Code Playgroud)