В тестах контроллера направляющих, там способ моделировать определенный удаленный IP?

Некоторая функциональность в моем приложении работает по-другому в зависимости от IP-адреса клиента. Существует ли способ протестировать это на функциональных испытаниях направляющих? Я использую Тест:: Единица и Должна иметь.

15
задан Ethan 19 January 2010 в 03:47
поделиться

3 ответа

Вы можете сделать это легко без огранки, изменив переменную среды Remote_addr перед вызовом контроллера. Вот вымышленный контроллер, который перенаправляет пользователю на домашний путь, если их IP-адрес 1.2.3.4:

def index
  if request.remote_ip == '1.2.3.4'
    redirect_to root_path
    return
  end

  @articles = Article.all
end

, что вы можете проверить, что он работает:

def test_should_reject_ip_1_2_3_4
  @request.env['REMOTE_ADDR'] = '1.2.3.4'
  get :index
  assert_redirected_to root_path
end

Вы устанавливаете удаленный IP заранее от вызова контроллера, Таким образом, вы можете подделать эти данные без каких-либо специальных плагинов или драгоценных камней. А вот версия должна, для элементов контроля:

context "with ip 1.2.3.4" do
  setup do
    @request.env['REMOTE_ADDR'] = '1.2.3.4'
    get :index
  end

  should_not_assign_to :items
  should_redirect_to("home"){home_path}
  should_not_set_the_flash
end
31
ответ дан 1 December 2019 в 01:45
поделиться

При создании BitSet с помощью конструктора BitSet (int nbits) можно указать емкость. Если вы догадаетесь, что емкость неправильная, и перейдете, она удвоит размер.

Класс BitSet имеет метод trimToSize , который является частным и вызывается writeObject и clone (). Если вы клонируете свой объект или преобразуете в последовательную форму его, то он урежет его к правильной длине (принимающий класс по расширенному он через ensureCapacity метод).

-121--2461674-

Вы ищете отражение в Perl. Я просто погуглил «Perl Reflection» без цитат и это вышло:

http://coding.derkeiler.com/Archive/Perl/perl.beginners/2004-10/0291.html

Edit: И вот: http://markmail.org/message/i5mzik56ry4zoxxq

Правка: И это: http://en.wikipedia.org/wiki/Reflection_ (computer_science) # Perl

-121--1361710-

Принимающему контроллеру необходим метод обнаружения IP-адреса (или его получения в качестве параметра), а также способ ввода определенного IP-адреса для теста или просто указания тестового IP-адреса в качестве параметра метода.

Если это нелегко с учетом того, что делает ваше приложение, можно сделать так, чтобы «настраиваемая функциональность» применялась к другому компьютеру в вашей домашней сети, если он у вас есть, и протестировать приложение путь. Это на самом деле не решает ответ «решить это через единичный тест».

Могу ли я спросить, почему ваше приложение выполняет определенное действие в зависимости от IP-адреса? Возможно, есть другой способ.

1
ответ дан 1 December 2019 в 01:45
поделиться

Вы должны иметь возможность выполнить это, вырезая запросы и возвращая имитирующий объект, который имеет request.remote_ip, равный нужному IP-адресу.

Я бы посмотрел на FakeWeb для помощи в этом. Это позволяет легко настроить ожидаемые запросы/ответы. Также может быть поучительно посмотреть, как сам Rails выполняет такие тесты .

1
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: