5

私はこれらの質問をたくさん見てきましたが、それらの解決策のどれも私のために働いていません. 次のような単一のテストがあります。

describe RolesController do
  describe "#delet" do 

    context "When the user is logged in" do 
      let(:user) {FactoryGirl.create(:user)}
      let(:admin) {FactoryGirl.create(:admin)}
      let(:adminRole) {FactoryGirl.create(:adminRole)}

      it "Should allow admins to delete roles" do 
        sign_in admin
        put :destroy, :id => adminRole.id
      end
    end
  end
end

シンプル、シンプル、シンプル。それでも、典型的なエラーが発生します。

  1) RolesController#delet When the user is logged in Should allow admins to delete roles
     Failure/Error: Unable to find matching line from backtrace
     SystemStackError:
       stack level too deep
     # /home/adam/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.0/lib/active_support/notifications/instrumenter.rb:23

そして、私はすべてのようです...何?繰り返しになりますが、これに関する数十の質問を読みましたが、それは工場の女の子に関係しているようですが、ここで何が問題になるのかわかりません. このようなファクトリーガールベースのオブジェクトを問題なくインスタンス化する他のテストがたくさんあります。

4

2 に答える 2

1

let無限再帰をトリガーするため、次のコード ブロック内で定義している変数を使用しないでください。

于 2017-01-18T16:38:08.647 に答える
-1

このスタックレベルが深すぎるというエラーを引き起こす名前の競合があると思います。

let(:adminRole) { FactoryGirl.create(:adminRole) }

adminRoleファクトリの名前を次のように変更してみてはどうでしょうか:admin_role

factory :admin_role do
  ...
end

そして、変数の規則letに従うように変更します。

let(:admin_role) { FactoryGirl.create(:admin_role) }

これがお役に立てば幸いです。

于 2015-07-20T17:25:02.873 に答える