Procurei esta pergunta e não consegui encontrar, ou sua resposta no Stack Overflow, mas encontrei em outro lugar, então estou pedindo para disponibilizá-la no SO.
O framework Rails tem uma função fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), que irá pesquisar seu diretório de fixtures pelo arquivo especificado e irá disponibilizá-lo como um arquivo de teste para o controlador no teste funcional. Para usá-lo:
1) Coloque seu arquivo a ser carregado no teste no subdiretório de fixtures / files para teste.
2) Em seu teste de unidade, você pode obter seu arquivo de teste chamando fixture_file_upload ('path', 'mime-type').
por exemplo:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) chame o método post para acertar a ação do controlador que você deseja, passando o objeto retornado por fixture_file_upload como parâmetro para o upload.
por exemplo:
post :bookmark, :bulkfile => bulk_json
Ou no Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Isso será executado através do pós-processo simulado usando uma cópia Tempfile do arquivo em seu diretório de fixtures e, em seguida, retornará ao seu teste de unidade para que você possa começar a examinar os resultados da publicação.
A resposta de Mori está correta, exceto que no Rails 3 ao invés de "ActionController :: TestUploadedFile.new" você deve usar "Rack :: Test :: UploadedFile.new".
O objeto de arquivo criado pode então ser usado como um valor de parâmetro em testes Rspec ou TestUnit.
fonte
Eu acho melhor usar o novo ActionDispatch :: Http :: UploadedFile desta forma:
Desta forma, você pode usar os mesmos métodos que está usando em suas validações (como por exemplo o arquivo temporário).
fonte
Do The Rspec Book, B13.0:
Rails 'fornece uma classe ActionController :: TestUploadedFile que pode ser usada para representar um arquivo carregado no hash de parâmetros de uma especificação do controlador, como este:
Esta especificação requer que você tenha uma imagem test_avatar.png no diretório spec / fixtures. Ele pegaria esse arquivo, faria o upload para o controlador e o controlador criaria e salvaria um modelo de usuário real.
fonte
Você deseja usar fixtures_file_upload . Você colocará seu arquivo de teste em um subdiretório do diretório fixtures e então passará o caminho para fixtures_file_upload. Aqui está um exemplo de código , usando upload de arquivo de fixação
fonte
Se você estiver usando o teste de trilhos padrão com a Factory Girl. Bem abaixo do código.
Nota: você terá que manter uma imagem fictícia em
/test/images/100_100.jpg
.Funciona perfeitamente.
Felicidades!
fonte
se você estiver obtendo o arquivo em seu controlador com o seguinte
em seguida, tente o seguinte em suas especificações:
Isso tornará o método falso para o método 'tempfile', que retornará o caminho para o arquivo carregado.
fonte