ruby-on-rails – RSPEC和工厂女孩SystemStackError:堆栈级别太
发布时间:2020-12-16 22:00:07 所属栏目:百科 来源:网络整理
导读:我试图解决我的Spec测试的问题,我收到以下错误 失败: 1) SessionsController POST 'create' with valid email and password should sign in the user Failure/Error: Unable to find matching line from backtrace SystemStackError: stack level too deep
我试图解决我的Spec测试的问题,我收到以下错误
失败: 1) SessionsController POST 'create' with valid email and password should sign in the user Failure/Error: Unable to find matching line from backtrace SystemStackError: stack level too deep # /Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:103 Finished in 37.77 seconds 9 examples,1 failure Failed examples: rspec ./spec/controllers/sessions_controller_spec.rb:35 # SessionsController POST 'create' with valid email and password should sign in the user 在此之前,我遇到了与我的工厂联系的问题. Factory.define :role do |role| role.name "Registered" role.association :user,:factory => :user end Factory.define :admin do |role| role.name "Admin" role.association :user,:factory => :user end Factory.define :user do |user| user.first_name "Foo" user.last_name "Bar" user.email "foo@bar.com" user.password "foobar" user.password_confirmation "foobar" user.status "At foobar" user.description "Lorem Ipsum sit dolor amet." user.username "foobar" user.association :role,:factory => :role user.association :admin,:factory => :role end Factory.define :user_with_admin_role,:parent => :user do |user| user.after_create { |u| Factory(:role,:user => u) } end Factory.define :reg_user do |user| user.first_name "bar" user.last_name "foo" user.email "bar@foo.com" user.password "foobar" user.password_confirmation "foobar" user.status "At foobar" user.description "Lorem Ipsum sit dolor amet." user.username "barfoo" user.association :role,:factory => :role end 我的会话测试到目前为止是: describe "POST 'create'" do describe "invalid signin" do before(:each) do @attr = { :email => "email@example.org",:password => "invalid" } end it "should re-render the 'new' page with a flash error" do post :create,:session => @attr flash.now[:error] =~ /invalid/i response.should render_template('new') end end describe "with valid email and password" do before(:each) do @user = Factory(:user) @attr = { :email => @user.email,:password => @user.password} end it "should sign in the user" do post :create,:session => @attr controller.current_user.should == @user end end end 我真的不知道创建问题是什么. user.rb def assign_default_role if User.count == 0 self.roles << Role.find_by_name("Admin") self.roles << Role.find_by_name("Registered") end self.roles << Role.find_by_name("Registered") unless User.count == 0 end 任何建议将是最受欢迎的. 解决方法
问题是这样的:
@user = Factory(:user) 您有一个循环引用:您的用户工厂创建一个:角色和:admin工厂.然后:角色和:管理工厂每个创建另一个:用户工厂,然后创建另一个:角色和:管理工厂,等等,直到你得到一个堆栈级别太深的错误. 您需要从其中的一些删除关联.我建议从role和:admin中删除role.association行.无论何时创建:用户,它仍将为您创建:角色和:admin行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |