0

デバイス認証のテストに rspec を使用しています。以下は私のコードです

require 'spec_helper'

describe User do

describe "user registration" do
it "allows new users to register with an email address and password" do
get "/users/sign_up"

fill_in "Email",                 :with => "abc@example.com"
fill_in "Password",              :with => "abc123"
fill_in "Password confirmation", :with => "abc123"

 click_button "Sign up"

   response.should have_content("Welcome! You have signed up successfully.")
  end
 end
end

次のエラーが表示されます。

「NoMethodError: 未定義のメソッド `get' for #」

4

4 に答える 4

2

モデル仕様でコントローラーメソッドと統合テストメソッド(Capybara)を使用しています。うまくいかないだろう。

モデル仕様(UNITテスト)には、次のようなものが含まれます。

  1. バリデーター/関係をテストします
  2. テストスコープ
  3. モデルのメソッド

RSpecを使用したテストに関するこの一連のブログ記事を確認してください。役立つはずです:http: //everydayrails.com/2012/03/12/testing-series-intro.html

于 2012-07-02T13:42:20.023 に答える
0

describe Userこれは、リクエストの実行を許可しないモデル仕様( )のようですが、おそらくコントローラー仕様( describe UsersController)または統合テストを作成する必要があります。

デフォルトのrspecレイアウトを使用している場合は、コードを適切なディレクトリ(spec/controllersまたはspec/integration)に移動するだけです。私は統合テストを行います:

# In spec/integration/user_registration_spec.rb
require 'spec_helper'

describe "User registration" do
  it "allows new users to register with an email address and password" do
    get "/users/sign_up"

    fill_in "Email",                 :with => "abc@example.com"
    fill_in "Password",              :with => "abc123"
    fill_in "Password confirmation", :with => "abc123"

    click_button "Sign up"

    response.body.should have_content("Welcome! You have signed up successfully.")
  end
end
于 2012-07-02T13:42:09.370 に答える
0

このファイルは spec/models ディレクトリにありますか? あなたdescribeUser. テストの書き方は、コントローラー スタイルのテストと統合 (受け入れ) テストを組み合わせたものです。これはおそらくあなたが望むものです:

require 'spec_helper'

describe User do
  describe "user registration" do
    it "allows new users to register with an email address and password" do
      visit "/users/sign_up"

      fill_in "Email",                 :with => "abc@example.com"
      fill_in "Password",              :with => "abc123"
      fill_in "Password confirmation", :with => "abc123"

      click_button "Sign up"

      page.should have_content("Welcome! You have signed up successfully.")
    end
  end
end

このファイルを spec/integration または spec/requests ディレクトリに置きます。

于 2012-07-02T13:46:15.607 に答える
0

私はおそらくこのようなことを試みるだろう

require 'spec_helper'

describe User do

describe "user registration" do
 it "allows new users to register with an email address and password" do
  visit new_user_registration_path
  current_path.should be(new_user_registration_path)

  fill_in "user[email]",                 :with => "abc@example.com"
  fill_in "user[password]",              :with => "abc123"
  fill_in "user[password_confirmation]", :with => "abc123"
  click_button "Sign up"

  expect { click_button submit }.to change(User, :count).by(1)
  response.should be_redirect   
  response.should have_content("Welcome! You have signed up successfully.")
  end
 end
end

しかし、FactoryGirlを使用して新しい値を生成することを強くお勧めします。また、どの Devise モジュールを使用しているかを確認してください。たとえば、確認可能なモジュールを使用している場合、このアプローチが間違っていることは明らかです。いくつかの有用な記事

于 2012-07-03T06:52:45.213 に答える