Ruby/Sinatra post
メソッドがYAMLストア/ファイルにデータを正常に保存することを、Rack :: Testでどのようにテストできるかについて、どこからでも基本的な説明を見つけることができません。 (Thisはget
のテストを説明していますが、post
ではなく、post
のラック/テストのテスト方法は無関係です)。自習のために、私はRuby/Sinatraと私はTDDのすべてを使い、良い少年のようなユニットテストをしようとしています。私が持っている要件は次のとおりです。ユーザが新しいタスクを投稿すると、そのタスクはYMLストアに保存されます。SinatraのポストメソッドがYAMLストアに正常に保存されていることをテストできますか?
私は、「タスクが保存されました」がユーザーへの応答に表示されているかどうかを確認することでどちらかをテストすることを考えていました(もちろん、直接テストするのではありません...でも)テストのような:
assert last_response.body.include?("Task saved")
または何らかの形でテストタスクの説明は、YMLファイルに今あることをテストすることもできます。私は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
...私がテストしたい1つの応答はスラッシュルート上に実際にあります、 /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
あなたはこの上で行くブック(章、ウェブサイト、ブログなど)の上に私に助言を与えることができる場合相対初心者からアクセスできる方法、私は最も感謝しています。
穏やかに...私は非常にテスト(プログラミング)に新しいです。