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
... 내가 테스트 할 하나 개의 응답이 슬래시 노선에 실제로, /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
당신이 넘어 책 (장, 웹 사이트, 블로그 등)에 나에게 조언을 줄 수있는 경우 상대적 초보자가 접근 할 수있는 방법, 나는 가장 감사 할 것입니다.
친절하게 ... 나는 테스트 (프로그래밍)에 매우 익숙합니다.