2012-06-15 1 views
0

minitest와 webrat를 사용하여 루비 인증 앱을 테스트하려고하는데 오류가 발생했습니다. visit '/'webrat를 사용하는 sinatra 앱의 수락 테스트가 실패했습니다

테스트 fill_in :email, :with => "[email protected]" 같은 코드를 포함 Status 200 expected but was 404.

테스트 오류 Could not find field: :email 실패 에러 실패.

나는 여러 가지 sinatra, 테스트 및 webrat 문서 및 포럼을 읽었습니다. 그 중 일부는 Sinatra :: Default와 같이 오래된 것으로 제안되었지만 github.com/brynary/webrat/wiki/sinatra, Building a Sinatra App Driven By Webrat TestsLearning From the Masters: Sinatra Internals은 새로운 기능이지만 여전히 실패합니다.

기본적으로 rspec, cucumber 등의 구문과 문장을 좋아하지는 않지만 행동 주도 개발을 원합니다. 나는 가장 작은 구문, 테스트와 출력 모두를 정말 좋아해서 BDD에 대한 webrat을 선택하는 이유입니다. 수락 테스트 요구 사항을 충족시키기 위해 webrat을 기대한다고 잘못 생각한다면 간단히 말해서이 프레임 워크 또는 그 프레임 워크를 사용해야한다고 말해주십시오.

메인 파일과 테스트 파일의 첫 부분은 다음과 같습니다. 누군가가 나를 설명 할 수 있기를 바랍니다. 제가 빠진 것이 무엇입니까?

test_file 잘 작동합니다 Webrat와시나를 사용

require "test/unit" 
require "minitest/autorun" 
require "rack/test" 
require 'webrat' 
require_relative "../lib/kimsin.rb" 

Webrat.configure do |config| 
    config.mode = :rack 
end 

ENV["RACK_ENV"] = "test" 

class KimsinTests < Test::Unit::TestCase 
    include Rack::Test::Methods 
    include Webrat::Methods 
    include Webrat::Matchers 

    def app 
    Sinatra::Application.new 
    end 

    def test_create_user 
    visit "/user/new" 
    fill_in :username, :with => "[email protected]" 
    fill_in :password, :with => "abC123?*" 
    fill_in :confirm_password, :with => "abC123?*" 
    click_link "Register" 
    assert 201, last_response.status, "Status 201 expected but was #{last_response.status}.\n#{error}" 
    assert_contain /Logged in as [email protected]/, "No user created" 
    assert_contain /Logout/, "Logout link not present" 
    end 

main_file

require "sinatra" 
require "erb" 
require_relative "../lib/kimsin/version" 
require_relative "../lib/kimsin/user" 

class Kimsin < Sinatra::Application 
    use Rack::Session::Pool, :expire_after => 2592000 
    set :session_secret, BCrypt::Engine.generate_salt 

    configure :development do 
    DataMapper.auto_migrate! 
    end 

    get "/" do 
    if session[:user_id] 
     user = User.get session[:user_id] 
     email = user.email 
     erb :index, :locals => { :email => email } 
    else 
     email = nil 
     erb :index, :locals => { :email => email } 
    end  
    end 

답변

0

. 나는 당신이보고있는 오류 (테스트 파일에 라인 (18)의 주위에) 다음과 같은 방법에 의해 발생하는 생각이 당신에 대한 테스트를 실행하기 위해시나 : 응용 프로그램의 기본 클래스를 설정하는 것입니다

def app 
    Sinatra::Application.new 
end 

정말 즉

def app 
    Kimsin.new 
end 

, 404 오류를 (당신은 모듈 형 스타일시나 응용 프로그램을 만들기 때문에)와시나 :: 응용 프로그램 경로도 정의하지 않기 때문에없는 필드가 일어나고 자신의 서브 클래스 Kimsin을 설정해야합니다 너는 시험하고있어.

Webrat과 유사한 대안을 찾고 있다면 Capybara을보고 싶을 수도 있습니다.

+0

URL을 방문하면 현재 작동하고있어 덕분에 앱을 시작했습니다. 하지만 여전히 '필드를 찾을 수 없습니다 : 이메일 :'과 '텍스트 또는 제목 또는 ID가있는 링크를 찾을 수 없습니다'와 같은 오류가 발생합니다. 카피 바라와 함께 확인해 보았는데 자체 오류가있어서 관련 질문에 추가했습니다. 이것에 대한 도움을 얻기 위해 제공해야하는 정보 나 파일이 더 있습니까? – barerd

+0

'fill_in' 또는'click_link' 호출에 문제가있는 것을 보지 못했습니다. 그래서 뭔가 다른 것이 잘못되어 실제로 그 요소가 존재하지 않는 것으로 보입니다. 이러한 종류의 문제를 신속하게 디버그하는 것은 테스트에서 실패한 줄 바로 앞에 'save_and_open_page'를 호출하여 실패 지점에서 웹 페이지를 볼 수 있도록하는 것입니다. 종종 이것은 오류를 나타냅니다. 이 작업을하려면'launchy' 젬을 설치해야합니다. – Steve

+0

save_and_open_page가 효과가있었습니다. 그들은 전에 사용자가 등록되지 않은 경우 내 세션 [: errors]이 로그인 페이지에 문제가 있음을 보여주었습니다. 내 테스트가 엄격한 순서 (색인 생성, 새 사용자 등록, 불량 사용자/암호 등록, 사용자 로그인 등)로 인해 실수로 알 수 없었습니다. – barerd