Я пытаюсь протестировать конечную точку метода postMessage
из Slack API, которая отвечает за отправку сообщений в Slack.
Как видите, это простые запросы HTTPost:
module Slack
class Messenger
def initialize(event)
@event = event
end
def call
HTTParty.post('https://slack.com/api/chat.postMessage', body: params, headers: headers)
end
private
attr_reader :event
def params
{
token: Settings.slack_token,
channel: Slack::GetUserId.new(parsed_email).call,
text: Slack::ReporterTextMessage.new(parsed_name, parsed_ticket_number).call,
as_user: true
}
end
#here are methods: parsed_email, parsed_name, parsed_ticket_number
Итак, я сделал тест на RSpe c:
RSpec.describe Slack::Messenger do
subject { described_class.new(event) }
let(:event) { File.new('./spec/support/events/event.json').read }
describe 'call' do
let(:valid_params) do
{
token: 'token',
channel: '12345',
text: 'This is a message',
as_user: true
}
end
let(:response) { subject.call }
before do
allow(HTTParty).to receive(:post).and_return(valid_params)
end
it "returns specific params" do
allow_any_instance_of(Slack::SlackMessenger).to receive(:call).and_return(valid_params)
expect(response).to receive(:call).with(valid_params)
end
end
end
Где-то у меня пародия отстой, потому что я получаю сообщение об ошибке:
Failure/Error: expect(response).to receive(:call).with(valid_params)
{:token=>"token", :channel=>"12345", :text=>"This is a message", :as_user=>true} does not implement: call
РЕДАКТИРОВАТЬ: после насмешки я получаю ошибку:
1) Slack::SlackMessenger call call HTTParty
Failure/Error: subject.call
TypeError:
no implicit conversion of nil into String
# /Users/usr/.rvm/gems/ruby-2.5.0/gems/json-2.2.0/lib/json/common.rb:156:in `initialize'
# /Users/usr/.rvm/gems/ruby-2.5.0/gems/json-2.2.0/lib/json/common.rb:156:in `new'
# /Users/usr/.rvm/gems/ruby-2.5.0/gems/json-2.2.0/lib/json/common.rb:156:in `parse'
# ./source/parsers/jira_parser.rb:9:in `initialize'
# ./source/slack/messenger.rb:30:in `new'
# ./source/slack/messenger.rb:30:in `parsed_email'
# ./source/slack/messenger.rb:23:in `params'
# ./source/slack/messenger.rb:13:in `call'
# ./spec/source/slack/messenger_spec.rb:56:in `block (3 levels) in <top (required)>'