Ruby:为什么我的测试看不到我的模块级别不变?

时间:2015-12-29 03:39:16

标签: ruby-on-rails ruby module

在文件lib/outer/inner/inner.rb中,我的ruby模块定义如下:

module Outer
  module Inner
    NAME = "Inner Name"
  end
end

并且在spec/lib/outer/inner/inner_spec.rb我的测试如下:

require 'spec_helper'

RSpec.describe Outer::Inner, type: :none do
  let(:name) { described_class::NAME }

  it "has the right name" do
    expect(name).to eql "Inner Name"
  end
end

运行此测试会导致

 Failure/Error: let(:name) { described_class::NAME }
 NameError:
   uninitialized constant Outer::Inner::NAME

测试可以很好地找到Outer::Inner模块,因此肯定已经需要它。

为什么测试看不到Outer::Inner::NAME

1 个答案:

答案 0 :(得分:0)

似乎Rails正在使用lib文件夹中的代码来覆盖代码内模块定义。

我将inner.rb向上移动了文件夹层次结构中的一个级别,然后就可以了。

因此lib/outer/inner/inner.rb变为lib/outer/inner.rb