首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当尝试安装多个窗口功能时,Chefspec无法工作

当尝试安装多个窗口功能时,Chefspec无法工作
EN

Stack Overflow用户
提问于 2016-05-23 19:39:26
回答 1查看 532关注 0票数 0

我有一个安装IIS组件的方法。因为有很多,所以它是一个数组,输入到一个windows_feature安装块中。就像这样:

代码语言:javascript
复制
 strings.each do |st|
     windows_feature st do
        guard_interpreter :powershell_script
         not_if "$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}"
         action :install
     end
 end

关联的Chefspec块具有相同的数组内容。区块是这样的:

代码语言:javascript
复制
describe 'HEQIIS::IIS' do
     let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }
   strings.each do |st|
     it "installs_#{st}" do
       stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}").and_return(false)
       expect(chef_run).to install_windows_feature("#{st}")
     end
   end
 end

当我在食谱上运行Chefspec时,我得到了错误:

代码语言:javascript
复制
HEQIIS::IIS installs_IIS-LegacyScripts
      Failure/Error: let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }

      ChefSpec::Error::CommandNotStubbed:
        Executing a real command is disabled. Unregistered command:

            command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}")

        You can stub this command with:

            stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}").and_return(...)
      # ./heqiis/spec/default_spec.rb:70:in `block (2 levels) in <top (required)>'
      # ./heqiis/spec/default_spec.rb:75:in `block (3 levels) in <top (required)>'

在错误中,它将-Featurename显示为'WebServerRole',它对每一行(30个条目)都这样做。指示它只在该阶段迭代第一项。再加上我确实使用了一个stub_command块,我不太清楚它为什么会出错。有人有想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-12 19:12:03

在您的规范中,您的厨师运行正在汇聚到let块中。将stub_command()调用移动到before do ... end块中有帮助吗?

编辑:实际上,您的食谱文件正在设置每个spec的expect()调用所需的命令的整个数组值。添加第二个循环,在一个前置块内,用于阻塞所有命令将解决您的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37399194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档