web-dev-qa-db-ja.com

TypeError:シングルトンを定義できません(RSpec)

これは初心者の問題のように見えるかもしれませんが、困惑しています。簡単なRuby slackサービスを構築しようとしています。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)>'

誰かがさらに情報を必要とする場合は編集します。このエラーの意味は何ですか?どうしてもそれを取り除くことができないようです。

13
Jay Kannan

タイプミスのようです。 :subjectではなく件名である必要があります

allow(subject).to receive(:client) { client }
32
Norly Canarias