2016-08-06 7 views
1

私は、次のモジュールがあります。このモジュールのRSpecの:未定義のメソッドEmeraldComponentための `はStandardError」:私の宝石モジュール

module EmeraldComponent 

    def self.create(full_name) 
    raise StandardError('Base directory for components is missing.') if base_directory_missing? 
    raise StandardError('An Emerald Component must have a name.') if full_name.empty? 
    raise StandardError('An Emerald Component must have a namespace.') if simple_name?(full_name) 
    write_component(full_name) 
    true 
    end 

    def self.write_component(full_name) 
    ## To be implemented 
    end 

    def self.simple_name?(full_name) 
    vet = full_name.split('.') 
    vet.length == 1 
    end 

    def self.base_directory_missing? 
    not (File.exist?(EmeraldComponent::BASE_DIRECTORY) && File.directory?(EmeraldComponent::BASE_DIRECTORY)) 
    end 

end 

そして、私のRSpecのテストの間に、私はこれらを持っている:

context 'create' do 

    it 'raises an error if the base directory for components is missing' do 
    expect { 
     EmeraldComponent.create('test.component.Name') 
    }.to raise_error(StandardError) 
    end 

    it 'raises an error if it receives an empty string as component name' do 
    expect { 
     EmeraldComponent.create('') 
    }.to raise_error(StandardError) 
    end 

    it 'raises an error if it receives a non-namespaced component name' do 
    expect { 
     EmeraldComponent.create('test') 
    }.to raise_error(StandardError) 
    end 

    it 'returns true if it receives a non-empty and namespaced component name' do 
    expect(EmeraldComponent.create('test.component.Name')).to be true 
    end 

それ私がテストを実行すると、最初のテストを除いて、すべてが合格となります。これは私に次のエラーを与える。モジュール:あなたが見ているよう

1) EmeraldComponent Methods create returns true if it receives a non-empty and namespaced component name 
Failure/Error: raise StandardError('Base directory for components is missing.') if base_directory_missing? 

NoMethodError: 
    undefined method `StandardError' for EmeraldComponent:Module 
# ./lib/EmeraldComponent.rb:10:in `create' 
# ./spec/EmeraldComponent_spec.rb:48:in `block (4 levels) in <top (required)>' 

StandardErrorがEmeraldComponentについて定義されていないと言っています。

StandardErrorはEmeraldComponent:Module!に属しません

さらに、これと同じStandardErrorは他のテストでもうまく機能しています。

私はしばらくの間、このエラーと戦ってきて、ここに投稿することに決めました。助言がありますか?

答えて

3

あなたはcreate方法に代わりにStandardError.newまたはStandardErrorをやるべき

def self.create(full_name) 
    raise StandardError.new('Base directory for components is missing.') if base_directory_missing? 
    raise StandardError.new('An Emerald Component must have a name.') if full_name.empty? 
    raise StandardError.new('An Emerald Component must have a namespace.') if simple_name?(full_name) 
    write_component(full_name) 
    true 
    end 
関連する問題