Rspec:未定义的方法`StandardError'对于EmeraldComponent:模块

时间:2016-08-06 01:42:43

标签: ruby rspec tdd

在我的宝石中,我有以下模块:

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

正如您所看到的,它是说EmeraldComponent:Module未定义StandardError

但是StandardError不属于EmeraldComponent:Module!

此外,同样的StandardError对其他测试工作正常!

我一直在与这个错误作斗争,然后决定在这里发帖。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您应该StandardError.new到位StandardError方法{/ 1}}

create