2015-02-18 2 views
0

Я пытаюсь справиться с обрезанием в Rspec. Я хотел бы понять, как заглушка возвращает значения из массива.Rcpec stubbing возвращает значения из заданного блока

Вот что я пытаюсь незавершенным в данный момент,

if client.jobs.any? 
     client.jobs.map do |job| 
     if job.job_locations.any? 
      job.job_locations.map do |jl| 
       if jl.location_id == self.location_id 
        errors.add(:location_id, "This location is in use with another of the client's jobs") 
        return false 
       end 
      end 
     end 
     end 
    end 

Я STUB первой строки (то есть клиент имеет работу), но я не уверен, как незавершенные возвращаемые значения из массив, чтобы они выполнялись в спецификационных тестах.

Вот соответствующий фрагмент кода

 context "location_id matches job_location location_id" do 
      before do 
      allow(client_location).to receive(:client).and_return(client) 
      allow(client).to receive(:jobs).and_return(some_jobs) 
      allow(some_jobs).to receive(:map).and_return([job]) 
      #eventually I want to get to this 
      allow_any_instance_of(JobLocation).to receive(:location_id).and_return(1) 
      allow_any_instance_of(ClientLocation).to receive(:location_id).and_return(1) 
      end 
      it "returns false" do 
      expect(@instance.destroy).to be_falsey 
      end 
     end 

Я должен добавить переменных «some_jobs» в тесте спецификации на заводе девушка генерироваться экземпляры. Некоторые задания будут равны [some_jobs].

+0

OMG! Ваш код ждет рефакторинга. Действительно :-) –

+0

да точно - я сначала пишу тесты, а затем рефакторинг! – user3868832

+0

@ Энтони ... Я знаю, что вы имели в виду .. lol;) –

ответ

0

Если определить some_jobs быть [job] (например, с помощью механизма Rspec в let), то вам не нужно заново карту и код производства будет продолжать выполнять. Пробив some_jobs.map, вы в основном обошли остальную часть вашего производственного кода.

Как и в стороне, определение client_location, client, some_jobs и job все весьма важное значение для кода фрагмент кода вы совместно и должны быть включены.

Смежные вопросы