TypeError:无法定义单例(RSpec)

时间:2017-11-02 17:02:30

标签: ruby unit-testing rspec

这看起来像是一个新手问题,但我很难过。我正在尝试构建一个简单的Ruby冗余服务,并且我正在使用RSpec进行一些单元测试。我碰到了这个奇怪的问题,我看不出发生了什么。

RSpec.describe SlackService do
  let(:token) { 'BOT-TOKEN' }
  subject do
    SlackService.new(token)
  end

  describe '#channel_list' do
    context 'get channels' do
      let(:client) { instance_double(Slack::Web::Client) }
      before(:each) do
        allow(:subject).to receive(:client) { client }
        @result = subject.channel_list
      end
      it { expect(@result).to eq [] }
    end
  end
end

运行rspec时出现的错误是

Failures:

  1) SlackService#channel_list get channels
     Failure/Error: allow(:subject).to receive(:client) { instance_double(Slack::Web::Client) }

     TypeError:
       can't define singleton
     # ./spec/slack_service_spec.rb:12:in `block (4 levels) in <top (required)>'

如果有人需要更多信息,我们会进行编辑。知道这个错误意味着什么吗?无论如何,我似乎无法摆脱它。

1 个答案:

答案 0 :(得分:25)

这似乎是一个错字。应该是主体而不是:主题

allow(subject).to receive(:client) { client }