我無法在Rack :: Test的任何地方找到關於如何測試的基本解釋,即Ruby/Sinatra post
方法成功地將數據保存到YAML存儲/文件。 (This解釋測試get
,我可以做(!),但不是post
;其他提及測試post
與機架/測試方法似乎不相關。)爲自學,我建立一個「做」應用程序在Ruby/Sinatra和我正在嘗試使用TDD的一切和單元測試,就像一個好孩子。我的要求是:當用戶發佈新任務時,它會保存在YML商店中。我可以測試Sinatra post方法是否成功保存到YAML商店?
我正在考慮通過查看「任務已保存」是否顯示在對用戶的響應中進行測試(當然這不是直接測試這個東西本身......但是我也會這麼做也喜歡測試):
assert last_response.body.include?("Task saved")
或者通過某種方式測試一個測試任務的描述現在在YML文件。我想我可以打開YML文件並查看,然後從YML文件中刪除它,但是我非常肯定這不是我應該做的。
我已經證實post
不正確保存到一個文件陽明海運:
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
如果你能給我建議一本書(章節,網站,博客等)越過這一個相對初學者可以訪問的方式,我會非常感激。
溫柔......我對測試(和編程)非常陌生。