2

返信ありがとうございます。
アプリケーションGitアプリケーションでエラーが発生します

Failures:

  1) Page pages page creation with invalid information should not create a page
     Failure/Error: before(:each) { visit new_admin_page_path }
     NoMethodError:
       undefined method `visit' for #<Page:0x00000005094bb0>
     # ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'

  2) Page pages page creation with invalid information error messages 
     Failure/Error: before(:each) { visit new_admin_page_path }
     NoMethodError:
       undefined method `visit' for #<Page:0x000000051671f0>
     # ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'

Finished in 1.21 seconds
14 examples, 2 failures

私が逃したものは?

4

3 に答える 3

10

リポジトリのクローンを作成し、仕様を実行しました。問題は、この用語pageを2つの異なるもの、つまりCapybaraページ(subject { page })と名前付きのモデルPage(これも名前を付けますpage)に使用していることです。これらの2つの名前は競合します。そのため、rspecは。のメソッドがないと不平を言っていvisitます#<Page:0x00000005094bb0>

これを解決するには、最初に作成したページの名前を変更しますlet

let(:mypage) { Factory.create(:page) }

mypageの代わりにページモデルに名前を付けることで、競合を回避しますpage

ただし、他にも問題があります。ユーザーファクトリは電子メールの割り当てにシーケンスを使用しないため、電子メールはすでに受信されていると表示されるため、検証エラーが発生します。

ユーザーファクトリを次のように変更しました。

sequence(:email) { |n| "abc#{n}@example.com"}
factory :user do
  email
  password "foobar"
  password_confirmation "foobar"
  ...

これで検証エラーは修正されますが、別のエラーが発生します。最初の仕様の行では、レコード(または)ではなく、クラスcountで変更されていないことを確認する必要があります。 Page pagemypage

したがって、次のように変更します。

expect { click_button "Create Page" }.not_to change(Page, :count)

に対してアクションがないため、これでもエラーが発生します。あなたが書いたものから、情報が無効であるように思われるので、それはこの行動にさえ到達するべきではありません。あなたがここで何をしようとしているのか正確にはわかりませんので、残りはあなたが理解できるように残しておきます。createPagesController

于 2012-09-19T12:17:22.613 に答える
6

最近Capybara2.0にアップグレードし、統合テストが以前のバージョンのCapybaraで機能していた場合は、requestsディレクトリの名前を機能に変更してみてください。http://www.codelearn.org/blog/how-to-make-old-integration-tests-work-with-capybara-2-0を確認してください

于 2012-12-20T16:29:03.550 に答える
3

spec/spec_helper.rb以下を(Spork.preforkブロック内の)に追加します。

require 'capybara/rspec'
require 'capybara/rails'
于 2012-09-19T06:31:58.050 に答える