RSpec вложенный, если функция - PullRequest
2 голосов
/ 06 ноября 2019

Я новичок в RSpec и пытаюсь провести тестирование, но не знаю, как обращаться с вложенным if. Я надеюсь, что вы можете мне помочь. Спасибо!

array1 = %w[a b]
array2 = %w[aa b c]
@a = if (array1 & array2).any?
       if !array2.include? 'c'
         'yes'
       else
         'no'
            end
     else
       'neither'
     end
puts @a

Я хотел бы разработать базовый тест для моего кода с использованием RSpec. Мой код работает отлично, я просто не знаю, как написать тест.

1 Ответ

2 голосов
/ 06 ноября 2019

Вам не нужно явно проверять вложенные выражения if. Когда вы пишете тест, вы тестируете код в целом. В этом случае у вас есть 3 возможных маршрута, по которым может идти код, и в этом случае вы бы написали 3 теста.

Один тест удовлетворял бы (array1 & array2).any? && !array2.include?('c'), второй тест удовлетворял бы (array1 & array2).any? && array2.include?('c'), а третий тестбудет удовлетворять (array1 & array2).empty?

Так, например ...


def my_function(array1, array2)
  if (array1 & array2).any?
    if !array2.include? 'c'
      'yes'
    else
      'no'
    end
  else
    'neither'
  end
end

RSpec.describe 'MyFunction' do
  context 'array has c' do
    it 'should return no' do   #
      expect { my_function(['b'], ['b']) }.to eq("no")
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...