模拟厨师::ReservedNames::Win32::厨师单元/rspec测试中的Version.new?[续]

模拟厨师::ReservedNames::Win32::厨师单元/rspec测试中的Version.new?[续],rspec,chef-infra,chefspec,Rspec,Chef Infra,Chefspec,假设我有以下配方: 安装iis: 我希望能够使用chefspec测试include\u recipe方法是否正在运行(if块中的所有内容) 阅读后: 标准RSpec应用于soallow(Chef::ReservedNames::Win32::Version.)。接收(:新)。和返回(double('fake Version'))或类似内容 来源: 我试图修改我的install\u iis\u spec以模拟Chef::ReservedNames::Win32::Version。我的等级库文件

假设我有以下配方:

安装iis:

我希望能够使用chefspec测试
include\u recipe
方法是否正在运行(
if
块中的所有内容)


阅读后:

标准RSpec应用于so
allow(Chef::ReservedNames::Win32::Version.)。接收(:新)。和返回(double('fake Version'))
或类似内容

来源:

我试图修改我的
install\u iis\u spec
以模拟
Chef::ReservedNames::Win32::Version
。我的等级库文件现在看起来如下所示:

安装iis\u规范:

注1:假设
应包含配方
方法按预期工作

注2:在看到
double('fake version')
后,我认为应该输入值

尽管如此,当我运行
chef exec rspec spec/unit/recipes/install_iis_spec.rb
时,我得到以下错误:

控制台错误:

my_recipe::在“Windows Server 2012 R2”上运行“iis::mod_aspnet45”配方时安装_iis
失败/错误:runner.converge(已描述)
#收到意外消息:windows\u服务器\u 2008?有(无参数)
#C:/Users/me/AppData/Local/Temp/d20161018-26632-iyzn4f/cookbooks/iis/libraries/helper.rb:44:在'older_-than_-windows2008r2'中
#C:\Users\me\AppData\Local\Temp\d20161018-26632-iyzn4f\cookbooks\iis\recipes\default.rb:22:in`from_file'
#C:\Users\me\AppData\Local\Temp\d20161018-26632-iyzn4f\cookbooks\my_recipe\recipes\install_iis.rb:23:in`from_file'
#./spec/unit/recipes/install_iis_spec.rb:61:in'block(3层)in'
#./spec/spec\u helper.rb:7:in'block(2层)in-should\u include\u recipe'
参考:


我必须在
double('fake version')
中输入什么值才能定位
Windows Server 2012R2


是否有受支持版本的列表?

'6.3'
只是一个假版本对象的标签。您需要告诉它如何响应方法。在这种情况下,它非常简单:
double('fake version'),:windows\u server\u 2008?=>false)
(或者如果你想假装是真的话,
true
)。通常,您会在
之前的
块中执行此操作,如下所示:

before do
  allow(Chef::ReservedNames::Win32::Version).to receive(:new).and_return(double('fake version', :windows_server_2008? => false))
end

你可以在RSpec文档或我确信可以通过Google获得的数千个教程中找到更多关于如何使用RSpec的信息。

这个
'6.3'
只是一个假版本对象的标签。您需要告诉它如何响应方法。在这种情况下,它非常简单:
double('fake version'),:windows\u server\u 2008?=>false)
(或者如果你想假装是真的话,
true
)。通常,您会在
之前的
块中执行此操作,如下所示:

before do
  allow(Chef::ReservedNames::Win32::Version).to receive(:new).and_return(double('fake version', :windows_server_2008? => false))
end

您可以在RSpec文档或我确信可以通过Google获得的数千个教程中的任何一个中找到有关如何使用RSpec的更多信息。

谢谢您为我整理。添加
:windows\u服务器\u 2008?=>false(错误)
为那部分做了手脚。一旦我这样做了,我就会得到一个错误,这是列表中的下一个错误。我相信我必须将所有这些添加到
和_return
,尽管我只是想知道是否有更好的方法?谢谢。这就是模拟的工作原理,你需要对每个方法进行专门的编码。谢谢你帮我整理。添加
:windows\u服务器\u 2008?=>false(错误)
为那部分做了手脚。一旦我这样做了,我就会得到一个错误,这是列表中的下一个错误。我相信我必须将所有这些添加到
和_return
,尽管我只是想知道是否有更好的方法?谢谢。这就是mocking的工作原理,您需要专门编写每个方法。
before do
  allow(Chef::ReservedNames::Win32::Version).to receive(:new).and_return(double('fake version', :windows_server_2008? => false))
end