下面的几行(rspec)代码有什么区别,不管它们是相同还是不同,什么时候应该使用一行而不是另一行?
book = double("book") allow(book).to receive(:title) { "The RSpec Book" }
对比
book = double("book") book.stub(:title).and_return("The RSpec Book")
lyr7nygr1#
有两个不同之处,但结果是完全相同的。两者都是关于rspec mocks/expectations语法。1.使用#allow而不是#stub方法。第一种情况使用今年引入的新rspec语法。**这是现在使用rspec的首选方式。**尽管旧语法没有被弃用,但它可能会在rspec 3中默认禁用。有关此主题的更多信息,请从rspec的维护者处获取:https://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/https://rspec.info/blog/2013/07/the-plan-for-rspec-3/1.使用block而不是#和_return来定义返回值。这与上面提到的语法变化无关;这两种方法都已经有一段时间了(从rspec 1开始)。使用#and_return方法更合适,因为它(a)是默认的方式,(b)更可读,(c)没有任何运行时开销。使用block的第二种方法通常被保留到角落的情况下,当你希望返回一些更具动态性质的东西时-不是常量,而是某种计算。您的问题的答案是使用两者的组合:
例如:
book = double('book') allow(book).to receive(:title).and_return('The RSpec Book')
1条答案
按热度按时间lyr7nygr1#
有两个不同之处,但结果是完全相同的。两者都是关于rspec mocks/expectations语法。
1.使用#allow而不是#stub方法。第一种情况使用今年引入的新rspec语法。**这是现在使用rspec的首选方式。**尽管旧语法没有被弃用,但它可能会在rspec 3中默认禁用。有关此主题的更多信息,请从rspec的维护者处获取:https://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/https://rspec.info/blog/2013/07/the-plan-for-rspec-3/
1.使用block而不是#和_return来定义返回值。这与上面提到的语法变化无关;这两种方法都已经有一段时间了(从rspec 1开始)。使用#and_return方法更合适,因为它(a)是默认的方式,(b)更可读,(c)没有任何运行时开销。使用block的第二种方法通常被保留到角落的情况下,当你希望返回一些更具动态性质的东西时-不是常量,而是某种计算。
您的问题的答案是使用两者的组合:
例如: