2017-09-17 15 views
0

私はレールのコントローラのテストを実行しています。 FactoryGirl(build、create)の両方のメソッドが期待どおりに動作する間、別のコントローラ用のrspecテストファイルの1つで、この新しいテストファイルはArgumentErrorを発生させています:createメソッドを呼び出すたびに間違った引数数。FactoryGirl ArgumentError:引数の数が間違っています(与えられた1、期待される0)

これは、ファイルがどのように見えるかです:さまざまで

require 'faker' 

FactoryGirl.define do 
    factory :user do 
    email { Faker::Internet.email } 
    password "password" 
    password_confirmation "password" 
    end 
end 

同じ行:

describe DoctorsController, type: :controller do             
    let(:user) { create(:user) }           

私はところで

これはFactoryGirl定義はどのように見えるかで工夫使用していますコントローラは魅力のように機能します:

describe ClinicsController, type: :controller do 

    context 'when signed in' do 
    let(:clinic) { build(:clinic) } 
    let(:user) { create(:user) } 
    before(:each) { sign_in user } 

これはなぜ起こっているのでしょうか?事前

完全な例で ありがとう:

require 'rails_helper' 

describe DoctorsController, type: :controller do 
    let(:doctor) { build(:doctor) } 
    let(:params) { doctor.attributes } 
    let(:user) { create(:user) } 

    it 'should be an instance of a secure controller' do 
    expect(DoctorsController.new).to be_a(SecureApplicationController) 
    end 

    describe '#create' do 
    subject(:create) { post :create, doctor: params } 
    context 'when signed in' do 
     before(:each) { sign_in user } 

     context 'on success' do 
     it 'should redirect with notification' do 
      expect(create).to redirect_to(doctors_path) 
      expect(flash[:notice]).to eq('Doctor creado satisfactoriamente') 
     end 
     it 'should create a new doctor' do 
      expect{ create }.to change { Doctor.count }.by(1) 
     end 
     it 'should assign existing clinics when creating a doctor' do 
      clinics = [create(:clinic), create(:clinic)] 
      post :create, doctor: params, clinics: clinics.map(&:id) 
     end 
     end 

     context 'on failure' do 
     subject(:create) { post :create, 
          doctor: attributes_for(:doctor, name: nil) } 
     it 'should redirect with notification' do 
      expect(create).to redirect_to(new_doctor_path) 
      expect(flash[:notice]).to eq('Error creando el doctor') 
     end 
     end 
    end 
    end 
end 

スタックトレース:あなたは

subject(:create) 

createを上書きしてしまったし、それはもうFactoryGirl.createを指していないよう

Failures: 

    1) DoctorsController#create when signed in on success should redirect with notification 
    Failure/Error: let(:user) { create(:user) } 

    ArgumentError: 
     wrong number of arguments (given 1, expected 0) 
    # ./spec/controllers/doctors_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 
    # ./spec/controllers/doctors_controller_spec.rb:17:in `block (4 levels) in <top (required)>' 

    2) DoctorsController#create when signed in on success should create a new doctor 
    Failure/Error: let(:user) { create(:user) } 

    ArgumentError: 
     wrong number of arguments (given 1, expected 0) 
    # ./spec/controllers/doctors_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 
    # ./spec/controllers/doctors_controller_spec.rb:17:in `block (4 levels) in <top (required)>' 

    3) DoctorsController#create when signed in on success should assign existing clinics when creating a doctor 
    Failure/Error: let(:user) { create(:user) } 

    ArgumentError: 
     wrong number of arguments (given 1, expected 0) 
    # ./spec/controllers/doctors_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 
    # ./spec/controllers/doctors_controller_spec.rb:17:in `block (4 levels) in <top (required)>' 

    4) DoctorsController#create when signed in on failure should redirect with notification 
    Failure/Error: let(:user) { create(:user) } 

    ArgumentError: 
     wrong number of arguments (given 1, expected 0) 
    # ./spec/controllers/doctors_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 
    # ./spec/controllers/doctors_controller_spec.rb:17:in `block (4 levels) in <top (required)>' 

Finished in 0.0092 seconds (files took 5.95 seconds to load) 
5 examples, 4 failures 
+0

は、あなたが失敗した例と完全なエラーを表示することができますか? – EJ2015

+0

'let(:user){FactoryGirl.create(:user)}'を試してください。 – Babar

+0

@Babarは既にそれをしていました:( –

答えて

0

に見えます、今作成するサブジェクトを評価するどのパラメータも期待していません。

あなたは、あるいはいかなることなく、異なる名前を持つ対象を定義することができますし、

subject { post :create ...} 
    expect(subject).to ... 
+0

@Babarとmetaに感謝します。上書きされ、奇妙なファイルシステムの動作が発生しました。 –

関連する問題