2016-08-06 37 views
1

In meinem Juwel habe ich folgendes Modul:: nicht definierte Methode `Standarderror‘ für EmeraldComponent: Modul

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 

Und unter meinen Rspec Tests für dieses Modul habe ich diese:

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 

Es passiert, dass, wenn ich den Test durchführe, alle von ihnen außer dem ersten passieren. Dies gibt mir den folgenden Fehler.

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)>' 

Wie Sie sehen können, es zu sagen, dass StandardError für EmeraldComponent nicht definiert ist: Modul.

Aber StandardError gehört nicht zu EmeraldComponent: Modul!

Und außerdem, das gleiche StandardError funktioniert gut für die anderen Tests!.

Ich habe diesen Fehler für eine Weile gekämpft und dann beschlossen, hier zu posten. Irgendwelche Vorschläge?

Antwort

3

Sie sollten StandardError.new an Ort und Stelle oder StandardError in Ihrer create Methode tun

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