葡萄rspec上传

时间:2014-09-12 10:07:34

标签: ruby-on-rails ruby-on-rails-4 rspec grape grape-api

我在我的rails应用程序中使用grape创建了一个api。

现在我要测试我所有的api。在我的api中,我可以上传声音,获取声音/:id和删除声音/:id。

我开始为后期声音编写测试,但我的测试一直返回"未定义的方法[]为nil:NilClass"。

我上传的curl命令(该作品):

curl -X POST -i -F data=@SOUND/test.mp3 "http://localhost:3000/api/sounds/new?access_token=1234567"

我认为当你使用" -F data ="时问题就出现了问题,你需要在" ="之后添加@。如果我删除@,我有未定义的方法[]为nil:NilClass错误。

现在我的问题是如何在测试中添加@ for test upload文件?

我的测试:

it "uploads a file" do
    sound_filename = "spec/fixtures/test.mp3"
    post "/api/sounds/new", data= Rack::Test::UploadedFile.new(sound_filename, 'audio/mp3', true)
    expect(response.status).to eq(201)
    expect(response.headers['Content-Type']).to eq("audio/mp3")
    expect(response.headers['Content-Disposition']).to eq("attachment; filename*=UTF-8''test.mp3")
  end

此测试返回此错误:nil的未定义方法[]:NilClass错误。谁知道我怎么解决它?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如何更换此行

post "/api/sounds/new", data= Rack::Test::UploadedFile.new(sound_filename, 'audio/mp3', true)

post "/api/sounds/new", {data: Rack::Test::UploadedFile.new(sound_filename, 'audio/mp3', true)}