葡萄rspec上传

问题描述 投票:0回答:1

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

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

我开始编写后期声音测试,但我的测试始终返回“undefined method [] for nil:NilClass”。

我的用于上传的curl 命令(有效):

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

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

现在我的问题是如何在我的测试中添加@用于测试上传文件?

我的测试:

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

此测试返回此错误:undefined method [] for nil:NilClass 错误。有人知道我该如何修复它吗?

感谢您的帮助。

ruby-on-rails ruby-on-rails-4 rspec ruby-grape grape-api
1个回答
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)}
© www.soinside.com 2019 - 2024. All rights reserved.