Ответы пользователя по тегу Ruby
  • Как написать тест, покрывающий 100% кода при двойной проверке условия?

    Правильный подход в таком случае - разделить получение данных из базы и проверку на нулевую цену. Ну самый простой пример - создайте функцию ensure_that_every_goods_has_price(goods) и вызывайте её вместо того, чтобы включать цикл в тело.

    Тогда вы сможете в тестах передать в неё набор товаров, среди которых будет нулевая цена и таким образом покрыть, а также переиспользовать её при необходимости. Я на руби не пишу, но псевдокод приблизительно такой:

    def ensure_that_every_goods_has_price(products)
      products.map do |product|
        unless product[:price] > 0
          warn 'wrong price'
          next
        end
      end
    end
    
    def products
      products = database.query 'SELECT * FROM product WHERE price > 0;'
      ensure_that_every_goods_has_price(products)
    end
    
    ## test:
    
    products = database.query 'SELECT * FROM product WHERE price >= 0;'
    should_warn ensure_that_every_goods_has_price(products)
    Ответ написан
    Комментировать