2016-09-06 2 views
0

Я работаю над проектом рельсов, где у меня есть функция, которая должна пройти много тестов (сотни или тысячи вызовов функции в модульном тесте). Я просто ищу простой способ утверждать результат (например, assert (class.foo (params)> 0.6, true) для проверки результата foo больше 0,6), и, возможно, он распечатает строку тестов, которые не прошел.Утверждение в Ruby on Rails - есть ли простой способ сделать это?

Я привык к такого рода модульным тестированию с помощью программирования на C \ C++, но из поиска в Интернете для подобного решения в рельсах я придумал такие драгоценные камни, как «MiniTest», где я должен инкапсулировать каждое утверждение в функцию (def \ assertion \ end), который увеличивает длину кода и делает весь процесс сизифическим, а код нечитабельным.

Суть: Я ищу способ, чтобы создать новый экземпляр моего класса, я = my_class.new, следуют многие утверждения: Assert (i.foo (PARAMS) < 0,6, правда) , Если тест не удался, было бы неплохо получить уведомление о точной строке.

Спасибо!

ответ

0

Я не знаю о MiniTest, но RSpec (другая популярная платформа тестирования) имеет возможность агрегировать ошибки. Таким образом, вам больше не нужно придерживаться правила «одно утверждение для каждой спецификации». Например:

RSpec.describe 'my big function' do 
    it 'does some stuff' do 
    expect(foo(params)).to be > 0.6 
    expect(bar(params)).to be < 0.4 
    end 
end 

В случае множественных отказов, вы получите подробный отчет, указывающий на точные линии с неудавшимися ожиданиями.

+0

Привет Sergio, спасибо за ответ. Я должен был упомянуть, но я не могу использовать RSpec, потому что там, где я работаю, он настроен на протирание базы данных, которую он использовал после теста, что не соответствует моим потребностям. Я мог бы скопировать базу данных, которую я использую во временное место, а затем использовать RSpec, но это занимает слишком много времени. Изменение конфигурации RSpec невозможно, не вызывая огромной головной боли для меня и моих сотрудников (они полагаются на эту конфигурацию). Спасибо в любом случае! –

0

Для MiniTest вы можете сделать несколько утверждений в проверке, как этот

require 'test_helper' 

class ListTest < ActiveSupport::TestCase 
    context "test my object" do 
    setup do 
     @my_object = MyObject.new 
    end 

    should 'be greater than .6 and title equal to blah' do 
     assert @my_object.value > 0.6 
     assert_equal @my_object.title, 'blah' 
    end 
    end 
end 
+0

Hi Martin, Использование установки заставляет новый объект быть созданным, каждая функция должна блокироваться, но мне нужен тот же объект, который будет использоваться во всех тестах (созданных один раз в начале). Я помню, как это выглядел и не мог найти возможности сделать это в рамках MiniTest. Я не знал о многих утверждениях на предмет «необходимости», знаете ли вы, если отчет впоследствии укажет на точную строку \ утверждение, которая не удалась? Спасибо! –

+0

@BenLiderman: в этой настройке он остановится при первой ошибке и больше не продолжит, я думаю. –

+0

@BenLiderman он отобразит точный номер файла и строки в результатах. Он выйдет из строя после его первого провала. Вы можете попробовать переместить настройку вне контекста, но я думаю, что он все равно создает новый объект каждый раз. Вы можете попытаться сохранить его в db в конце каждого из них, а затем перезагрузить. –

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