私はChefSpecを使用してレシピのテストを書こうとしています。chefSpecの環境変数へのアクセス
これは、私がテストしようとしているコードの一部です:
ここfile node[:storm][:job_dir] + node[:storm_work_gen][:jar_name] do
owner node[:storm][:user]
group node[:storm][:user]
action :delete
only_if { File.exist? node[:storm][:job_dir]+node[:storm_work_gen][:jar_name] }
end
node[:storm_work_gen][:jar_name]
の値が環境ファイルから来ています。私のenvファイルの内容は次のとおりです。
# coding: UTF-8
name 'sro_work_gen_dev'
description 'Sro Work Generator Environment for dev cluster'
override_attributes()
default_attributes(
storm_work_gen: {
cache_prop: {
expire_time: '30',
max_record_size: '100'
},
parallelism_hint: {
kafka_spout_brq_sfq_ph: '1',
kafka_spout_ftl_ph: '1',
data_marshaller_ph: '1',
data_processor_ph: '1',
item_lookup_ph: '1',
rule_applier_ph: '1',
worlist_writer_ph: '1'
},
num_workers: '2',
Topology_Name: 'WorkGen-tplgy-json-version',
Kafka_Zookeepers: '...',
Kafka_Broker: '...',
repo_url: '...',
jar_name: 'wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar'
}
)
そして、私の仕様のようになります。私は、ノードを取得する方法を知りたい
NoMethodError
-------------
undefined method `[]' for nil:NilClass
at line file node[:storm][:job_dir] + node[:storm_work_gen][:jar_name] do
[:
describe 'storm_wlm_deploy::_artifact' do
# let(:chef_run) { ChefSpec::SoloRunner.new.converge(described_recipe) }
let(:chef_run) do
ChefSpec::SoloRunner.new do |node|
env = Chef::Environment.new
env.name 'storm_work_gen'
allow(node).to receive(:chef_environment).and_return(env.name)
allow(Chef::Environment).to receive(:load).and_return(env)
end.converge(described_recipe)
end
it 'delete the jar:/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar if it exists' do
expect(chef_run).to delete_file('/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar')
end
end
スペックはメッセージで失敗:storm_work_gen] [:jar_name] chefSpecが実行されたときenvファイルから
が、私はノードのモックできる方法として理解しようとしています[:jar_name] receipeにchefSpecは、実行時に私はこれを行う方法を指摘することができます。 – user3394555
私はテストのためにノードに直接設定します。 envスタブを取り除き、同じブロック内の 'node.set [:storm_work_gen] [:jar_name] = '何でも'を追加してください。 – coderanger
ありがとう、これは動作します – user3394555