Вот что получилось:
# lib file
module SlackWrapper
class << self
def client
@client ||= ::Slack::Web::Client.new
end
end
end
describe SlackWrapper do
# test file
before :each do
$mock_client = double("slack client").tap do |mock|
allow(mock).to receive(:channels_info) { channel_info }
end
module SlackWrapper
class << self
def client
$mock_client
end
end
end
end
describe "#should_reply?" do
describe "while channel is paused" do
it "is falsey" do
SlackWrapper.pause_channel message.channel
expect(
SlackWrapper.should_reply? message
).to be_falsey
end
end
describe "while channel is not paused" do
it "is truthy" do
expect(
SlackWrapper.should_reply? message
).to be_truthy
end
end
end
end
Это определенно не кажется правильным. Однако, оставляя $mock_client
в качестве локальной переменной, я получаю undefined local variable
при выполнении тестов, а перемещение кода double...
в monkeypatch дает undefined method
. И конечно же, обезьяноподготовка.
Как правильно это сделать?