Я пытаюсь проверить подписку MailChimp к определенному списку:окурки MailChimp апи вызов для функционального тестирования
тест/функционал/some_controller_test.rb
require 'test_helper'
class SomeControllerTest < ActionController::TestCase
test "invalid signup" do
Gibbon.stubs(:subscribe).raises(Gibbon::MailChimpError, 500)
post :signup, {:EMAIL => "invalid_email"}
assert_response 500
end
test "valid signup" do
Gibbon.stubs(:subscribe).returns(200)
post :signup, {:EMAIL => "[email protected]"}
assert_response 200
end
end
Контроллеры/some_controller.rb
class SomeController < ApplicationController
def signup
begin
gb = Gibbon::API.new
resp = gb.lists.subscribe(
:id => ENV["key_list"],
:email => {:email => "#{params[:EMAIL]}"}
)
render :status => :ok, :json => resp
rescue Gibbon::MailChimpError => e
render :status => :internal_server_error, :json => {error: e, message: e.message}
end
end
end
Но я думаю, что я здесь что-то пропустил, потому что тесты проходят, но они делают вызов API, потому что, поскольку я использую свое электронное письмо для целей тестирования, я получаю подтверждение по электронной почте ция от MailChimp каждый раз, когда я бегу:
"rake test:functionals"
И если я пытаюсь запустить:
Gibbon.any_instance.stubs(:subscribe).raises(Gibbon::MailChimpError, 500)
или
Gibbon.any_instance.stubs(:subscribe).returns(200)
я получаю следующие ошибки:
test_invalid_signup(SomeControllerTest):
NoMethodError: undefined method 'any_instance' for Gibbon:Module
test_valid_signup(SomeControllerTest):
NoMethodError: undefined method 'any_instance' for Gibbon:Module
EDIT I
Я был в состоянии использовать any_instance метод делает это:
require 'test_helper'
class NewsletterControllerTest < ActionController::TestCase
test "invalid signup" do
gb = Gibbon::API.new
gb.any_instance.stubs(:subscribe).raises(Gibbon::MailChimpError, 500)
post :signup, {:EMAIL => "invalid_email"}
assert_response 500
end
test "valid signup" do
gb = Gibbon::API.new
gb.any_instance.stubs(:subscribe).returns(200)
post :signup, {:EMAIL => "[email protected]"}
assert_response 200
end
end
Но до сих пор делает вызов к API.
hi @newmediafreak, я пробовал ваш ответ, но я получил эту ошибку: test_valid_signup (SomeControllerTest): ActiveSupport :: JSON :: Encoding :: CircularReferenceError: объекты ссылаются сами. Я смотрю, почему. – nisevi
после прочтения этого: github.com/rspec/rspec-mocks/issues/78 Я сделал некоторые изменения Gibbon :: API.any_instance.stubs ({: EMAIL => "[email protected]"}). Возвращает (списки) но я все еще сталкиваюсь с API MailChimp, и это то, чего я хочу избежать .... жаль, что задержка в ответе API MailChimp заставило меня подумать, что его ответ был прав ... – nisevi