如何在ruby on rails应用程序上使用Rack发送POST模拟请求



我正在测量用rails new myblog --database=sqlite3生成的rails博客应用程序的各个方面所花费的时间。我正在使用它,没有修改和数据库包含博客文章。到目前为止,我只是在测试花在特定文章上的GET请求上的时间。我正在使用Rack及其MockRequest,这是我的测试文件的摘录:

app = Rails.application
env = Rack::MockRequest::env_for("http://localhost/blog_posts/25")
resp = app.call(env)
unless resp.first == 200
raise "error with response #{resp.first}"
end

我意识到,像这样使用,我的env_for调用只执行GET请求,我想使用post请求将一篇新的博客文章添加到我的数据库中,但我不知道该怎么做,但我总是得到422的回复("你想要的更改被拒绝了,也许你试图更改你无法访问的东西。"(。

app = Rails.application
env = Rack::MockRequest::env_for("http://localhost/blog_posts", :method => "POST", :params => {content: "lorem ipsum body", title: "lorem ipsum title", created_at: DateTime.now(), updated_at: DateTime.now()})
resp = app.call(env)
unless resp.first == 200
raise "error with response #{resp.first}"
end

所以我的问题是:

  • 我可以用机架进行POST模拟请求并修改数据库吗
  • 如果是,我应该在某个地方更改数据库的权限吗?还是问题源自其他地方
  • 如果没有,是否有解决方法?这只是为了测试,所以没有安全问题,尽管我更喜欢继续使用mock请求,因为它更适合我的测试基础设施

作为附加信息,这是数据库的模式:

create_table "blog_posts", force: :cascade do |t|
t.string "title"
t.text "content"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end

我的测试脚本中有两个错误:

  • 发送的数据格式不正确。应该是:
env = Rack::MockRequest::env_for("http://localhost/blog_posts", :method => "POST", :params => {post:{content: "lorem ipsum body", title: "lorem ipsum title"}})
  • 成功添加文章的响应是302

现在工作正常!

最新更新