我正在尝试测试特定列表的 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 => "my_email@something.com"}
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
编辑我
我能够使用 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 => "my_email@something.com"}
assert_response 200
end
end
但仍在调用 API。