重定向要素规范

时间:2017-12-18 22:57:31

标签: ruby-on-rails-4 capybara capybara-webkit

在测试期间重定向后会话对象被清除。

首先,我的测试堆栈。我正在使用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

0 个答案:

没有答案