Некоторая функциональность в моем приложении работает по-другому в зависимости от IP-адреса клиента. Существует ли способ протестировать это на функциональных испытаниях направляющих? Я использую Тест:: Единица и Должна иметь.
Вы можете сделать это легко без огранки, изменив переменную среды 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
При создании BitSet
с помощью конструктора BitSet (int nbits)
можно указать емкость. Если вы догадаетесь, что емкость неправильная, и перейдете, она удвоит размер.
Класс BitSet
имеет метод trimToSize
, который является частным и вызывается writeObject и clone (). Если вы клонируете свой объект или преобразуете в последовательную форму его, то он урежет его к правильной длине (принимающий класс по расширенному он через ensureCapacity метод).
Вы ищете отражение в 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-адреса? Возможно, есть другой способ.
Вы должны иметь возможность выполнить это, вырезая запросы и возвращая имитирующий объект, который имеет request.remote_ip
, равный нужному IP-адресу.
Я бы посмотрел на FakeWeb для помощи в этом. Это позволяет легко настроить ожидаемые запросы/ответы. Также может быть поучительно посмотреть, как сам Rails выполняет такие тесты .