在测试期间重定向后会话对象被清除。
首先,我的测试堆栈。我正在使用capybara 2.6.2,capybara-webkit 1.8.0和rspec 3.3.0运行Rails 4.2.4应用程序。我的测试没有问题,直到没有任何明显的理由,他们没有。
以下是我的代码(精简以保持原状):
assessment_controller.rb
def create
@assessment_basic = Assessment::Basic.new(params)
if @assessment_basic.valid?
session[:most_recent_zip_code] = @assessment_basic.zip_code
if household.search.present?
update_household_search(@assessment_basic.zip_code)
end
redirect_to dashboard_path
else
render :new
end
end
private
def household
if @household
@household
elsif session[:household_id]
@household = find_household(session[:household_id])
elsif session[:most_recent_zip_code]
@household = Household.create(household_params)
session[:household_id] = @household.id
end
@household
end
正如您所看到的,这非常简单。我在params收到邮政编码。我存储该邮政编码供以后使用,并使用它来创建一个家庭对象,除非已存在,在这种情况下我将返回该实例。如果实例化了一个家用对象,那么我将其id存储在会话中,将控制权返回给操作并重定向到具有会话中两个变量的dashboard_path。所有这些都运作良好,并且已经有一段时间了。
但是,当我尝试访问仪表板#index action中的变量时,我存储的会话变量都不存在。该功能有效,这表明我的问题是运行我的规格的位。顺便说一句,规范在本地传递。当代码移动到我们的CI环境时,我们就会收到错误。我们尝试了三种不同的CI环境(Circle,Semaphore和Travis),它们都报告了同样的错误:
#<NoMethodError: undefined method 'search' for nil:NilClass>
这基本上意味着,家庭无法重建,因此是零。仔细观察可以看出,无法从会话中创建家庭的原因是会话已被清除。
有人可以帮我识别在测试期间确保会话值持续存在的组件吗?如果您需要其他任何东西以便能够帮助我,请告诉我。
赫
it 'a client visits the referrals page with all providers minus the single stop and tax locations from the dashboard page and ' do
user_visits_the_homepage
enter_zip_code('11217', true)
dashboard_page.expect_to_be_on
dashboard_page.click_browse_local_resources
referrals_page.expect_to_be_on
end
def user_visits_the_homepage
visit '/'
expect(page).to have_content t('welcome.where')
end
def enter_zip_code(zip_code = '11217', remain_dashboard = false)
within '.welcome-form:nth-of-type(1)' do
fill_in t('welcome.where'), with: zip_code
click_on t('welcome.get_started')
end
expect(page).to have_content t('header.dashboard')
click_on t('header.your_profile') unless remain_dashboard
expect(page).to have_field t('activerecord.attributes.client_household_member.zip_code'), with: zip_code unless remain_dashboard
end