Как глобально заглушить HTTP-запрос с помощью Test :: Unit? - PullRequest
4 голосов
/ 07 июля 2011

Как перенести запрос http, такой как этот, в API Twitter ниже, в глобальной области видимости, чтобы он действовал для всех тестов в наборе Test :: Unit?

stub_request(:get, "https://api.twitter.com/1/users/show.json?screen_name=digiberber").
    with(:headers => {'Accept'=>'application/json', 'User-Agent'=>'Twitter Ruby Gem 1.1.2'}).
    to_return(:status => 200, :body => "", :headers => {})

Эта заглушка WebMock работает в блоке setup () подкласса TestCase, например

class MyTest < ActiveSupport::TestCase       
  setup do
    stub_request(...)...
  end
end

Но не распознается, если я поместил его в глобальную настройку в самом TestCase:

require 'webmock/test_unit'
class ActiveSupport::TestCase  
  setup do
    stub_request(...)
  end
end

Что дает мне ошибку:

NoMethodError: undefined method `stub_request' for ActiveSupport::TestCase:Class

Я также попытался пропатчить сам метод def

def self.setup
  stub_request(...)
end

но это тоже не работает.

Нечто подобное происходит, когда я использую FlexMock вместо WebMock. Кажется, это проблема масштаба, но я не могу понять, как ее обойти. Идеи?

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Используя FakeWeb , вы можете сделать что-то вроде этого:

In * test / test_helper.rb *

require 'fakeweb'

class ActiveSupport::TestCase
  def setup
    # FakeWeb global setup
    FakeWeb.allow_net_connect = false # force an error if there are a net connection to other than the FakeWeb URIs
    FakeWeb.register_uri(:get, 
        "https://api.twitter.com/1/users/show.json?screen_name=digiberber",
        :body => "",
        :content_type => "application/json")
  end
  def teardown
    FakeWeb.allow_net_connect = true
    FakeWeb.clean_registry # Clear all registered uris
  end
end

При этом вы можете позвонить на зарегистрированный fakeweb из любого тестового примера.

1 голос
/ 08 июля 2011

Этот пост о различных способах setup () и teardown () привел меня к тому, что

class ActiveSupport::TestCase  
  def setup
    stub_request(...)
  end
end

не думал об объявлении его как метода экземпляра.: P

0 голосов
/ 19 июля 2011

Драйвер капибары Akephalos поддерживает озвучивание http-вызовов. Они называют это фильтрами.

http://oinopa.com/akephalos/filters.html

http://github.com/Nerian/akephalos

...