2013-04-18 102 views
0

我有经过大部分时间测试:偶尔失败RSpec的测试

.... 

Finished in 1.58 seconds 
4 examples, 0 failures 

Randomized with seed 29966 

但有时会失败:

.F.. 

Failures: 

    1) Admin::SessionsController POST create authenticates correct users submissions 
    Failure/Error: expect(session[:user_id]).to be @user.id 

     expected #<Fixnum:3> => 1 
      got #<NilClass:4> => nil 

     Compared using equal?, which compares object identity, 
     but expected and actual are not the same object. Use 
     `expect(actual).to eq(expected)` if you don't care about 
     object identity in this example. 
    # ./spec/controllers/admin/sessions_controller_spec.rb:12:in `block (3 levels) in <top (required)>' 

Finished in 1.24 seconds 
4 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/admin/sessions_controller_spec.rb:10 

有什么特别的情由任何人都可以在此看到?

规格:

describe "POST create" do 
    it "authenticates correct users submissions" do 
     post :create, email: @user.email, password: @user.password 
     expect(session[:user_id]).to be @user.id 
    end 

    it "correctly sets @invalid flag" do 
     post :create, email: "wrong", password: "wrong" 
     assigns(:invalid).should be_true 
    end 
    end 

控制器行动正在测试:

def create 
    user = Admin::User.authenticate(params[:email], params[:password]) 
    if user 
     session[:user_id] = user.id 
     redirect_to admin_root_path 
    else 
     @invalid = true 
     render :new 
    end 
    end 

任何帮助将非常感激。让我知道是否需要更多细节。

+2

@user是如何为您的规范创建的?可以在为“Admin :: User.authenticate”创建用户之前调用问题示例以查找? – Mori

+0

看起来您已经设置了rspec来随机化测试运行的顺序 - 您可能想要查看在失败测试之前运行了哪些测试,以查看测试失败时是否存在某些问题。 –

回答

3

这很可能是因为RSpec默认情况下以随机顺序运行测试。

它看起来像你引用的测试是在创建用户之前调用的。如果你想解决它,请确保用户是在before块中创建的。或者,它可能是因为用户已经存在,因此操作失败。

+0

这就是它的感谢。 –