2016-06-27 10 views
0

現時点では、これは単純なプロジェクトです。静的なページのほんの数ページです。私はジェネリックなテストフレームワークを開発していますが、さまざまなテストオプションを区別するのには苦労しています。私はRspec、Capybara、Faker、Factory Girl、Spring、そしてshouldaを追加しました(ただし、私は現時点ではshoulda matcherを使用していません)。capybara have_title NoMethodError

私はこのコントローラのテストファイルがあります。

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 

これはガードを通るとき、それはエラー・スタックをスロー:

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 

最初のテストは、二なしで、私が得る、OK走るとをきれいな結果。私は多くの時間を私の設定を越えて過ごしました。それはOKです。私はまた、ドキュメントやいくつかのサポートサイトを見てきました。

誰でも手助けできますか?

答えて

1

Capybaraマッチャーは、応答オブジェクトに対してではなく、html/xmlドキュメント要素(またはドキュメントを解析する文字列)に対して呼び出す必要があります。デフォルトでは、Capybarasマッチャーは通常、フィーチャーとビューのスペック(コントローラーではない)でのみ使用できます。ページのタイトルを確認することは、コントローラよりもビューの仕様にもっと傾くべきである(デフォルトではコントローラの仕様では表示されない - https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs)。

+0

フィードバックいただきありがとうございます。このことをたくさん読んだら、モデル、コントローラ(OQで提案したテストのタイプを除く)、およびフィーチャのテストのみを作成する傾向があると思います。ビューのテストではそれほど多くのことをもたらすようには見えないので、私はそれらを気にするつもりはないと思う。それは正しいと思いますか? –

+0

@SteveRoachあなたがより生産的になるのに役立つテストを書いてください - 1つの利点ビューテストは機能テストよりもはるかに速い傾向がありますが、実際に確認できるのでページがJS駆動になるにつれて有用性を失い始めます静的コンテンツ私の個人的な信念は、TDDのことが多くの人々をテスト対象に押し上げていることです。 –

+0

そのトムに感謝します。私は、主にビューに対するフィーチャテストにもっと重点を置いて、主にすべてを1つのアプローチにすると思います。私はただ一つのことにとても良くなることを願っています。多分、私はそれを少し混ぜ合わせるだろう。私はスピードの問題で今生き​​ていきます。私はテストのバランスを正しく取ろうとしています、そして、私はそれがより多くの経験と共に来ると思います。その間、私はあらゆるプロジェクトのための良い基礎を与える標準的な(私に)テストのライブラリを置こうとしています。その後、それを上に構築します。フィードバックいただきありがとうございます - それはすべて良いです。 –