以下 (rspec) 代码行之间有什么区别,无论它们是相同还是不同,什么时候应该使用其中一个而不是另一个?
book = double("book")
allow(book).to receive(:title) { "The RSpec Book" }
相对
book = double("book")
book.stub(:title).and_return("The RSpec Book")
有 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')