rspec/mocha ошибка при проверке фактора
Я написал очень простой факт. Это выглядит так:
# Kubadmin facts
#
require 'json'
Facter.add(:has_kubectl) do
confine :kernel => :linux
setcode do
Facter::Core::Execution.which('kubectl')
end
end
Facter.add(:kubernetes_version) do
confine :kernel => :linux
kubernetes_json = Facter::Core::Execution.execute('/usr/bin/kubectl version -o json')
kubernetes_parsed_json = JSON.parse(kubernetes_json)
versions = {
"client" => kubernetes_parsed_json['clientVersion']['gitVersion'],
"server" => kubernetes_parsed_json['serverVersion']['gitVersion'],
}
setcode do
versions
end
end
Теперь я хочу проверить этот факт, поэтому я написал для него специальный тест
require 'spec_helper'
describe 'kubectl', :type => :fact do
before :each do
Facter.clear
Facter.clear_messages
end
before(:each) do
Facter.fact(:kernel).stubs(:value).returns('linux')
end
expected = File.read('spec/expected/kubectl_client_server.json')
context 'kubectl installed' do
it 'should return nil' do
expect(Facter.fact(:has_kubectl).value).to eq nil
end
end
context 'server and client returns' do
it do
Facter::Core::Execution.stubs(:execute).with('/usr/bin/kubectl version -o json').returns expected
expect(Facter.fact(:kubernetes_version).value).to be_a(Hash)
expect(Facter.fact(:kubernetes_version)).to include(
'client' => "v1.8.4",
'server' => "v1.8.4"
)
end
end
end
Когда я запускаю тесты, я получаю очень странную ошибку:
1) kubectl kubectl installed should return nil
Failure/Error: expect(Facter.fact(:has_kubectl).value).to eq nil
Mocha::ExpectationError:
unexpected invocation: Facter::Core::Execution.which("vmware")
satisfied expectations:
- allowed any number of times, not yet invoked: #<Puppet::Util::Feature:0x7f88fbc7cca8>.root?(any_parameters)
- allowed any number of times, invoked 15 times: #<Facter::Util::Fact:0x7f88fbc96220>.value(any_parameters)
- allowed any number of times, not yet invoked: Facter::Core::Execution.which("kubectl")
2) kubectl server and client returns
Failure/Error:
expect(Facter.fact(:kubernetes_version)).to include(
'client' => "v1.8.4",
'server' => "v1.8.4"
)
Mocha::ExpectationError:
unexpected invocation: Facter::Core::Execution.execute("uname -r", {:on_fail => nil})
satisfied expectations:
- allowed any number of times, not yet invoked: #<Puppet::Util::Feature:0x7f88fbc7cca8>.root?(any_parameters)
- allowed any number of times, invoked 13 times: #<Facter::Util::Fact:0x7f88fbf61748>.value(any_parameters)
- allowed any number of times, invoked once: Facter::Core::Execution.execute("/usr/bin/kubectl version -o json")
Что я тут не так сделал?
Код для этого, кстати, здесь: https://github.com/jaxxstorm/puppet-kubeadm/blob/version_facts/spec/unit/facter/kubectl_spec.rb