Para um de nossos projetos de cliente, dependemos muito de algumas tarefas Rake que são executadas para buscar dados do SAP (ugh!) E outras APIs internas (yay!). Por exemplo, o SAP mantém muitos dados de estoque e estoque de que precisamos para entrar em nosso aplicativo Rails.
No início, não testamos essas coisas. O inferno se abriu várias vezes desde então.
Então, tentamos testar com o Cucumber e algum tipo de Rake runner. Isso está ok, mas ter todos os tipos de matchers Rspec e definições de etapa Cucumber apenas para testar uma tarefa de importação é um exagero e custa muita energia ao contrário de um simples teste de integração Rails.
Então, finalmente, acabei com algo novo e mais simples. Abandonei o executor de tarefas Rake e apenas paguei com backticks para iniciar a tarefa de rake. O que é bom, já que essa também é a forma como o Cron executa a tarefa em nossos ambientes de servidor.
Coloquei tudo em um teste de integração simples. Aqui está um exemplo simples de um desses casos de teste:
test "product should be added with category SAP new when present in SAP export and not in VacuStock" do
`bundle exec rake import_stock_from_sap:import`
product = Product.find_by_shop_code('0000000001')
assert_not_nil product, "Expected product New Bag to Import to be created"
assert_equal 'New Bag to Import WITH STOCK!', product.title
assert_equal 400, product.stock_from_sap
category = Category.find_by_title('SAP new')
assert_equal [category], product.categories
end
Este caso de teste testa se um novo produto da exportação SAP é criado de acordo com alguns metadados extras.
Simples! Não há mais problemas.