99m*_*les 7 rspec ruby-on-rails
给定一个这样的控制器,它创建了几个供视图使用的实例变量,你通常会测试每个变量是否正确设置?看起来你会想要,但它似乎有点可能有点棘手.什么是正确的方法?
class StaffsController < ApplicationController
def index
set_index_vars
@all_staff = Staff.find_staff_for_business_all_inclusive(current_business_id)
respond_to do |format|
format.html { render :action => "index", :locals => { :all_staff => @all_staff, :all_services => @all_services, :new_vacation => @new_vacation } }
end
end
def set_index_vars
@days_of_week = days_of_week
@first_day_of_week = DefaultsConfig.first_day_of_week
@all_services = Service.services_for_business(current_business_id)
@new_vacation = StaffVacation.new
@has_hit_staff_limit = current_user_plan.has_hit_staff_limit?
end
end
Run Code Online (Sandbox Code Playgroud)
zet*_*tic 11
如果你要写一个控制器规范,那么是的,一定要测试实例变量的分配.大多数'棘手'可能来自对其他模型/库的依赖,因此存在这些方法调用:
# air code
Staff.stub(:find_staff_for_business_all_inclusive) {array_of_staff}
controller.stub(:days_of_week) {['Monday','Tuesday',....etc...]}
DefaultsConfig.stub(:first_day_of_week) {"Monday"}
Service.stub(:services_for_business).with(some_value_for_the_current_business_id).\
and_return(some_relevant_value)
StaffVacation.stub(:new) {something_meaningful}
controller.stub_chain(:current_user_plan,:has_hit_staff_limit?) {false}
get :index
assigns(:days_of_week).should == ['Monday','Tuesday',....etc...]
# ...etc...
Run Code Online (Sandbox Code Playgroud)