我可以测试Sinatra POST方法是否成功保存到YAML商店吗? [英] Can I test that a Sinatra post method successfully saves to a YAML store?
本文介绍了我可以测试Sinatra POST方法是否成功保存到YAML商店吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
post
方法成功地将数据保存到YAML存储/文件的基本说明。(This解释测试get
,我可以(!),但不能post
;其他提到的使用机架/测试测试post
方法似乎无关紧要。)为了自学,我正在用Ruby/Sinatra构建一个"待办事项"应用程序,我试着像一个好孩子一样使用TDD一切和单元测试。我的一个要求是:当用户发布新任务时,该任务将保存在YML存储区中。
我想通过查看在对用户的响应中是否显示"任务已保存"来测试这一点(这当然不是直接测试事物本身.但这也是我想也测试的内容):
assert last_response.body.include?("Task saved")
我已确认post
是否正确保存为YML文件:
get('/') do |*user_message|
# prepare erb messages
@user_message = session[:message] if session[:message]
@overlong_description = session[:overlong_description] if
session[:overlong_description]
session[:message] = nil # clear message after being used
session[:overlong_description] = nil # ditto
@tasks = store.all
erb :index #, user_message => {:user_message => params[:user_message]}
end
post('/newtask') do
@task = Task.new(store, params)
# decide whether to save & prepare user messages
if @task.complete == true # task is complete!
@task.message << " " + "Task saved!"
session[:message] = @task.message # use session[:message] for user messages
@task.message = ""
store.save(@task)
else
@task.message << " " + "Not saved." # task incomplete
session[:message] = @task.message # use session[:message] for user messages
session[:overlong_description] = @task.overlong_description if
@task.overlong_description
@task.message = ""
@task.overlong_description = nil
end
redirect '/'
end
如您所见,它以重定向结束.我想测试的一个响应实际上是在劈开路由上,而不是在/newtask
路由上。
所以测试当然不起作用:
def test_post_newtask
post('/newtask', params = {"description"=>"Test task 123"})
# Test that "saved" message for user is in returned page
assert last_response.body.include?("Task saved") # boooo
end
如果您能就一本书(章节、网站、博客等)给我建议如果能以相对初学者可以理解的方式讲完这一点,我将不胜感激。
温柔点……我对测试(和编程)非常陌生。
推荐答案
没有人回答我的问题,既然我已经知道答案是什么,我想我应该在这里分享它。
首先,我认为应该没有必要检查数据是否真的保存到了YAML存储中;主要是查看网页是否返回了正确的结果(如果是,我们假设数据库很好)。
我上面写的测试方法是正确的;它只是缺少了一行follow_redirect!
。显然,我没有意识到我需要指示rake/test遵循重定向。
问题的一部分是我没有找到正确的文档。This page确实给出了正确的语法,但没有给出太多细节。This page帮助很大,this bit covers redirects。
更新后的测试方法如下:
def test_post_newtask
post "/newtask", params = {"description" => "Write about quick brown foxes",
"categories" => "writing823"}
follow_redirect!
assert last_response.body.include?("Task saved")
assert last_response.body.include?("Write about quick brown foxes")
end
(感谢哥伦布红宝石旅)
这篇关于我可以测试Sinatra POST方法是否成功保存到YAML商店吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文