Testando postagens com várias partes com pepino-api-etapas

No modo Set usamos @jayzes do pepino-api-passos para APIs de teste e documentos que criamos para projetos de clientes. Recentemente, precisamos testar o upload de imagens por meio de um formulário de postagem com várias partes. Rack :: Test torna isso bastante trivial. Definimos uma etapa personalizada abaixo.

Given( /^(?:|I )send a multipart (POST|PUT) request (?:for|to) "([^"]*)" with:/) do |verb, path, body|
body
= body.hashes
request
= body.inject({}) do |hash, row|
if row['Filename'].present?
hash
[row['Name']] = Rack::Test::UploadedFile.new(Rails.root.join('features/support/attachments/', row['Filename']), row['Type'])
else
hash
[row['Name']] = row['Content'].strip
end
hash

end

page
.driver.send(verb.downcase.to_sym, path, request)
end

Observação: definimos os cabeçalhos de aceitação em outras definições de etapas

O cenário então se parece com:

@json
Scenario: As a patient I want to attach an image to a message
When I send a multipart POST request to "/api/doctors/1/messages" with:
| Name | Content | Filename | Type |
| message[body] | lorem ipsum | | |
| message[attachment] | | face-itch.jpg | image/jpeg |

Agora você tem que testar sua API com uploads de arquivos!