RSpec 3未定义方法`允许&#39; for#<rspec :: core :: examplegroup ...> </rspec :: core :: examplegroup ...>

时间:2014-10-29 20:08:47

标签: ruby-on-rails ruby rspec

describe '#messages' do
  subject do
    FactoryGirl.create :foo,
      :type => 'test',
      :country => 'US'
  end

  context 'when is not U.S.' do
    before{ allow(subject).to receive(:country).and_return('MX') }

    describe '#messages' do
      subject { super().messages }
      it { is_expected.to include 'This foo was not issued in the United States of America.' }
    end
  end
end

我正试图为这个主题分配一个属性......我似乎无法使咒语正确。我需要双人吗?我不确定它是如何工作的,我显然无法破译文档。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我认为这里的问题是范围之一。在设置before

之前,您正在调用subject块中的代码

你需要将subject移出到外部上下文中,将before移动到内部描述中,或者设置一些替代方法来调用它,以便{{1 }}在运行subject

之前设置

答案 1 :(得分:0)

我认为您应该使用letsubject变量定义为辅助方法。有了这个,您将定义一个可以在文件中的任何位置使用的辅助方法。

所以,我会修改你的代码如下:

describe '#messages' do
  let(:subject) do
    FactoryGirl.create :foo,
      :type => 'test',
      :country => 'US'
  end

  context 'when is not U.S.' do
    before{ allow(subject).to receive(:country).and_return('MX') }

    describe '#messages' do
      subject { super().messages }
      it { is_expected.to include 'This foo was not issued in the United States of America.' }
    end
  end
end