黄瓜测试为什么会这样?

时间:2012-04-22 16:58:21

标签: ruby-on-rails validation cucumber

我有这样的场景

Given /^initial data$/ do |table|
  @schedule_05 = Factory.build :schedule_05
  @schedule_05.save
  puts "count of rows #{@schedule_05.cycles.count}" - # is 7
end
#....... there are same steps and where filling text fields and so on/

When /^i click a submit button "([^"]*)" in form$/ do |runs|
  click_button(runs) # this is ajax request
end

Then /^count of SchOfWorkInformation is 365$/ do 
  puts "count of rows #{ScheduleOfWorking.count}" # is - 1
  s_c = ScheduleOfWorking.find_by_schedule_code("05") # is too 1
  puts "05 schedule is presents #{s_c.blank?}" # false
  unless s_c.blank?
    puts "05 schedule is presents #{s_c.date_of_countings.blank?}" #false
  end
end

在我单击提交的步骤中涉及控制器ScheduleOfWorkingController的填充操作

def filling
unless request.xhr?
  @classifier_schedule = ScheduleOfWorking.classifiers_numbers
  @schedule_number = ScheduleOfWorking.classifiers_numbers false
else
  if params[:date_begin].blank? || params[:date_end].blank?
    render :js => "alert('date fields is empty !')"
    return
  end
  ScheduleOfWorking.fill_information_for(params[:date_begin].to_date,params[:date_end].to_date)
end

ScheduleOfWorking#fill_information_for

def self.fill_information_for(date_begin, date_end)
  sch = all
  sch.each do |e_sch|
    e_sch.date_of_countings.each do |d_counting|
      h_calculate = d_counting.roll_cycle(date_begin, date_end)
      transaction do
        SchOfWorkInformation.delete_all("(date >= '#{date_begin}' and date <= '#{date_end}') and schedule_code = #{d_counting.sch_code}")

        SchOfWorkInformation.create! h_calculate 
      end
    end
  end
end

在SchOfWorkInformation中我有像这样的自定义验证方法

def customer_validate
s = SchOfWorkInformation.where(:date => self.date, :schedule_code => self.schedule_code).first

if !s.blank? && (new_record? || s.id != self.id)
  self.errors[:base] = "Запись не уникально!(date=#{self.date.to_s(:db)}, schedule_code=#{self.schedule_code})"
end

sch_number = schedule_code[0..1].blank? ? "0" : schedule_code[0..1]
session_number = schedule_code[2].blank? ? "0" : schedule_code[2]
logger.info "---------------------------------------"
ss_a = ScheduleOfWorking.all

s = ScheduleOfWorking.where("schedule_code='#{sch_number}'").
                      joins(:date_of_countings).
                      where("date_countings.session_number=#{session_number}")
  # In Given section of my step i load the data, but s.balnk? gives true
  if s.blank?
    self.errors[:base] = "Schedule - #{sch_number} with session number #{session_number}), is not exists in DB"
  end
end

为什么我的数据会在验证方法中丢失?求救!

在开发环境中所有的权利,但在测试中没有。

..对不起长信..

1 个答案:

答案 0 :(得分:1)

您使用哪种数据库策略进行这些测试?如果它在事务中运行,则数据实际上永远不会持久存储到数据库中。您应该对这些步骤使用其他方法,因为无论运行多少线程或进程,都保证数据保持不变。当您发出ajax请求时,它在对服务器的单独请求中,并且数据库事务仅对该请求可用。

在我的应用程序中,我有一个使用共享连接的javascript测试设置:

Cucumber::Rails::Database.javascript_strategy = :shared_connection
相关问题