Правильный подход в таком случае - разделить получение данных из базы и проверку на нулевую цену. Ну самый простой пример - создайте функцию 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)