2016-03-01 109 views
0

当我运行我的单元测试用例(写在ChefSpec)我得到以下错误:ChefSpec无法找到食谱

Chef::Exceptions::CookbookNotFound: Cookbook azuredns not found. If you're loading azuredns from another cook book, make sure you configure the dependency in your metadata

以下是我的规格文件,配方文件和元数据文件

azuredns /规格/ get_azure_token_spec.rb

require 'chefspec' 
require 'rest-client' 

describe 'azuredns::get_azure_token' do 
    let(:chef_run) do 
    # Step into the provider 
    runner = ChefSpec::SoloRunner.new(step_into: ['azuredns_token']) 
    # Read test data from a json file 
    file_path = File.expand_path('test_data.json', __dir__) 
    file = File.open(file_path) 
    contents = file.read 
    node_attr = JSON.parse(contents) 
    # Load test data into node object 
    runner.node.consume_attributes(node_attr) 
    runner.converge(described_recipe) 
    end 

    before(:each) do 
    # Mock post method of RestClient 
    allow(RestClient).to receive(:post) 
     .and_return({ access_token: 'i-am-a-token' }.to_json) 
    end 

    it 'retrieves token' do 
    expect(chef_run).to retrieve_azuredns_token('azure_token') 
    end 

    it 'varifies the expected value of azure_rest_token' do 
    expect(chef_run.node['azure_rest_token']).to eq('Bearer i-am-a-token') 
    end 

    it 'does not retrieve token due to incorrect resource name' do 
    expect(chef_run).to_not retrieve_azuredns_token('azure_token1') 
    end 

    it 'raises exception due to error in response' do 
    # Mock post method of RestClient 
    allow(RestClient).to receive(:post) 
     .and_return({ error: 'invalid_grant' }.to_json) 
    expect { chef_run }.to raise_error(Exception) 
    end 
end 

azuredns /配方/ get_azure_token.rb

require 'rest_client' 
require 'json' 

cloud_name = node['workorder']['cloud']['ciName'] 
cloud = node['workorder']['services']['dns'][cloud_name] 
dns_attributes = cloud['ciAttributes'] 

# Establish connection and get a security token 
token = azuredns_token 'azure_token' do 
    tenant_id dns_attributes['tenant_id'] 
    client_id dns_attributes['client_id'] 
    client_secret dns_attributes['client_secret'] 
end 

token.run_action(:retrieve) 

azuredns/metadata.rb

name    'Azuredns' 
maintainer  'Shaffan' 
maintainer_email '[email protected]' 
license   'Apache License, Version 2.0' 
description  'Installs/Configures Azure DNS' 
version   '0.1.0' 
depends   'azure' 

请帮帮忙!

回答

1

Azuredns!= azuredns :-)

在元数据中确定名称。厨师和UNIX世界的所有东西都区分大小写。

+0

这是我们的编码惯例,以保持首字母大写。 – Shaffan

+0

当我更改我的测试案例是这样的:describe“Azuredns :: get_azure_token” 我得到这个错误:“没有资源或方法azuredns_token在get_azure_token.rb配方” 也就是说,它无法找到我的自定义资源(LWRP) – Shaffan

+0

是的,因为再一次,你将不得不使用'Azuredns_token'。这是* all *区分大小写,这就是为什么您应该修复名称。 – coderanger