2016-06-27 3 views
0

현재이 프로젝트는 정적 인 페이지입니다. 제네릭 테스트 프레임 워크를 개발하고 있지만 다른 테스트 옵션을 구별하기 위해 고심하고 있습니다. 나는 Rspec, Capybara, Faker, Factory Girl, Spring, 및 shoulda를 추가했다. (그러나 나는 현재로서는 shoulda matchers를 사용하지 않는다.)capybara have_title NoMethodError

내가이 컨트롤러 테스트 파일이 : 내가 얻을, 두 번째 않고

23:13:39 - INFO - Run all 
23:13:39 - INFO - Running all specs 
Running via Spring preloader in process 4498 
Running via Spring preloader in process 4506 
/home/steve/workspaces/static_site/db/schema.rb doesn't exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter /home/steve/workspaces/static_site/config/application.rb to limit the frameworks that will be loaded. 
.F 

Failures: 

    1) StaticPagesController GET #a_page has a page title Static Site 
    Failure/Error: expect(response).to have_title('Static Site') 

    NoMethodError: 
     undefined method `match' for nil:NilClass 
     Did you mean? catch 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/capybara-2.7.1/lib/capybara/queries/title_query.rb:18:in `resolves_for?' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/capybara-2.7.1/lib/capybara/node/document_matchers.rb:20:in `block in assert_title' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/capybara-2.7.1/lib/capybara/node/simple.rb:144:in `synchronize' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/capybara-2.7.1/lib/capybara/node/document_matchers.rb:19:in `assert_title' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/capybara-2.7.1/lib/capybara/rspec/matchers.rb:105:in `matches?' 
    # ./spec/controllers/static_pages_controller_spec.rb:34:in `block (3 levels) in <top (required)>' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-commands-rspec-1.0.4/lib/spring/commands/rspec.rb:18:in `call' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/command_wrapper.rb:38:in `call' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:191:in `block in serve' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:161:in `fork' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:161:in `serve' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:131:in `block in run' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:125:in `loop' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application.rb:125:in `run' 
    # /home/steve/.rvm/gems/ruby-2.3.1/gems/spring-1.7.1/lib/spring/application/boot.rb:19:in `<top (required)>' 
    # -e:1:in `<main>' 

Finished in 0.029 seconds (files took 2.54 seconds to load) 
2 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/static_pages_controller_spec.rb:33 # StaticPagesController GET #a_page has a page title Static Site 

첫 번째 테스트 확인을 실행하고이 경비를 실행하면

require 'rails_helper' 

RSpec.describe StaticPagesController, type: :controller do 

    describe "GET #a_page" do 
    before(:each) { get :a_page } 

    it "returns http success" do 
     expect(response).to have_http_status(:success) 
    end 
    it "has a page title Static Site" do 
     expect(response).to have_title('Static Site') 
    end 
    end 

end 

을, 에러 스택을 던졌습니다 깨끗한 결과. 나는 많은 시간을 내 config를 지나는 데 보냈으며 괜찮아 보였다. 필자는 문서와 지원 사이트를 살펴 보았습니다.

아무도 도와 줄 수 있습니까?

답변

1

응답 개체가 아니라 html/xml 문서 요소 (또는 문서로 구문 분석되는 문자열)에 대해 Capybara matchers를 호출해야합니다. 기본적으로 Capybaras matchers는 일반적으로 기능 및보기 사양에서만 사용할 수 있습니다 (컨트롤러가 아님) 컨트롤러 사양에 포함시킨 특별한 이유가 있습니까? 페이지 제목을 확인하는 것은 컨트롤러보다 뷰 스펙이되는쪽으로 기울여야합니다 (기본적으로 뷰는 컨트롤러 사양 - https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs으로 렌더링되지 않음).

+0

의견을 보내 주셔서 감사합니다. 이 문제를 많이 읽은 후에는 모델, 컨트롤러 (OQ에서 제안한 테스트 유형 제외) 및 기능에 대한 테스트 만 작성하려고합니다. View 테스트는 그렇게 많은 것을 얻지 못하는 것 같아서 나는 그들과 함께 신경 쓰지 않을 것이라고 생각합니다. 그게 맞는 것 같니? –

+0

@SteveRoach 어떤 테스트가 생산성 향상에 도움이되는지 기록하십시오. - 기능 테스트를 통해 테스트 한 기능 테스트는 속도가 훨씬 빠르지 만 페이지가 실제로 확인 될 수 있기 때문에 페이지가 더 많이 구동됨에 따라 유용성을 잃기 시작합니다. 정적 콘텐츠. 내 개인적인 믿음은 TDD가 많은 사람들이 테스트 것들 이상으로 밀어 붙였다는 것입니다. –

+0

그 톰에 감사드립니다. View에 대한 기능 테스트는 주로 모든 것에 대해 하나의 접근 방식을 사용하는 것이 더 중요하다고 생각합니다. 나는 그저 한 가지를 아주 잘하기를 바랍니다. 어쩌면 길을 따라 조금 섞을거야. 나는 지금 속도 문제로 살거야. 나는 시험 균형을 바로 잡으려고 노력하고있어. 그리고 나는 더 많은 경험도 올 것이라고 생각한다. 그동안, 나는 모든 프로젝트에 좋은 기초를 제공 할 표준 (나에게) 테스트 라이브러리를 제공하려고 노력 중이다. 그럼 그걸 쌓아 라. 피드백에 감사드립니다. 모든 것이 좋습니다. –