How to stub powershell.exe in chefspec?

Trying to write a ChefSpec unit test on windows. My cookbook depends on the ‘chocolatey’ and ‘windows’ cookbooks.

I’m attempting to test that a package is installed, yet I’m getting an error STDERR: sh: powershell.exe: command not found

I’m trying to stub the return of powershell.exe, yet chefspec still fails. I’m running on a Mac, so there is no powershell.exe.

schedtask.rb

chocolatey '7zip' do
  action :install
end

spec/unit/recipe/schedtasks_spec.rb

require 'spec_helper'

RSpec.configure do |config|
  config.platform = 'windows'
  config.version  = '2012R2'
end

describe 'my-cookbook::schedtasks' do
  context 'When all scheduled tasks are disabled' do
    let(:chef_run) do
      ChefSpec::SoloRunner.new(step_into: ['windows','chocolatey']) do |node|
        node.set['foo'] = 42
      end.converge(described_recipe)
    end
    before do
      stub_command(/powershell.exe*/).and_return(true)
    end

    it 'installs 7zip' do
      stub_command(/powershell.exe*/).and_return(true)
      expect(chef_run).to_not install_chocolatey('7zip')
    end

How can I prevent chefspec from trying to actually run powershell on the chocolatey resource?

I resolved this issue by stubbing out the call to chocolatey_installed? instead.

  before(:each) do
    allow_any_instance_of(Chef::Resource).to receive(:chocolatey_installed?).and_return(true)
  end