2013-04-21 55 views
1

我跑了devise-rspec-cucumber project黄瓜,但以下情形失败:黄瓜:对于用户方案尚未注册失败

Scenario: User is not signed up 
    Given I do not exist as a user 
    When I sign in with valid credentials 
    Then I see an invalid login message 
    And I should be signed out 

未定义的方法'扁平化”的零:NilClass(NoMethodError)

1种情形(1失败)

4步骤(4通过)

我试图消除除了第一个每一步,它仍然失败:

Given /^I do not exist as a user$/ do 
    create_visitor 
    delete_user 
end 

其中

def create_visitor 
    @visitor ||= { :name => "Testy McUserton", :email => "[email protected]", 
    :password => "changeme", :password_confirmation => "changeme" } 
end 

def delete_user 
    @user ||= User.where(:email => @visitor[:email]).first 
    @user.destroy unless @user.nil? 
end 

但是,如果我有create_user取代create_visitor,它会通过。

def create_user 
    create_visitor 
    delete_user 
    @user = FactoryGirl.create(:user, @visitor) 
end 

我很困惑发生了什么事。在我看来,这个步骤定义正期待着一些我没有提供的东西。

回答

1

我得到了同样的错误信息。我确信我的脚步没有任何问题。因此,我尝试将database_cleaner gem升级到最新版本(1.0.1),因为错误是由database_cleaner引起的。它确实解决了这个问题。我建议你试试这个,如果你的database_cleaner gem版本不是1.0.1。只要做

$ bundle update database_cleaner

0

问题存在的位置:

create_visitor 
    delete_user 

在第一步骤中,您创建了一个游客,但不是一个用户。然后在第二步中尝试删除不存在的用户。这就是测试失败的原因。

我建议你复习逻辑并创建正确的步骤。

+0

除非@ user.nil? – user2191332 2013-04-22 01:00:37

+0

@ user2191332,由于缺少错误信息,我无法做出更多判断。但显然'delete_user'中的逻辑不稳定,'@ user'不存在。而'User.where(:email => @visitor [:email])。first'也会抛出异常。 – 2013-04-22 01:08:25

+0

所以我猜@ user.nil?导致错误。但是,如果我删除delete_user,并且只运行Given/^语句作为用户$ /不存在,则会发生同样的错误,我不知道为什么。另外,黄瓜不会告诉我发生错误的位置。有没有办法打开这个?谢谢。 – user2191332 2013-04-22 01:10:29