Tarefas de teste de integração Rake

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.