zed.0xff.me
rspec views & params
Пытаюсь тестить спеку вьюшки(view). Причем внутри нее такая логика:
1 |
<%= verbose_search_results(user) if params[:verbose] %>
|
И я не нашел более вменяемого способа передать в нее params, чем следующий:
1 2 3 4 |
it "should do what I said" @controller.stub!(:params).and_return({:verbose => true}) render 'admins/users/list' end |
И тут есть белая сторона медали, а есть черная.
Белая – при этом стандартные параметры 'action'
и 'controller'
также нормально передаются, т.е. мой and_return
действует недеструктивно.
Черная – params
, переданный внутри такой спеки, становится невосприимчив к ключам-символам!
т.е. if params[:verbose]
работать НЕ будет (хотя на живых рельсах работает прекрасно).
А вот if params['verbose']
будет работать и там и там.
PS: может быть, конечно, есть более вменяемый способ передать params, но пока я его не обнаружил.
UPD: как оказалось rspec инициализирует параметры 'action'
и 'controller'
уже на готовом хэше params
, т.е. чтобы всё работало также как и на живых рельсах, надо делать так:
1 2 3 4 |
it "should do what I said" @controller.stub!(:params).and_return(HashWithIndifferentAccess.new({:verbose => true})) render 'admins/users/list' end |
т.е. явно инициализировать params
как HashWithIndifferentAccess
, а не просто хэш.
IMHO как-то это всё-таки кривовато, и должен быть более прямой и очевидный способ..