【问题标题】:Why i am getting undefined local variable or method `role' in cucumber test cases为什么我在黄瓜测试用例中得到未定义的局部变量或方法“角色”
【发布时间】:2013-10-11 11:32:20
【问题描述】:

following error i am getting

   And I am exists as a parent      # features/step_definitions/kid_steps.rb:106
   undefined local variable or method `role' for #<Cucumber::Rails::World:0xc4722f8> (NameError)
  ./features/step_definitions/event_steps.rb:10:in `create_visitor'
  ./features/step_definitions/event_steps.rb:14:in `create_user'
  ./features/step_definitions/kid_steps.rb:107:in `/^I am exists as a parent$/'
  features/manage_kids.feature:11:in `And I am exists as a parent'

用户工厂

          FactoryGirl.define do

           factory :user do
             email "user@example.com"
             password "test123"
             password_confirmation "test123"
          end
          factory :role do
             id "1"
             name "admin"

             id "2" 
             name "parent"

             id "3" 
             name "gifter"
          end
       end </code>

user.rb

    def role?(role)
       return !!self.roles.find_by_name(role.to_s)
    end

ability.rb

   class Ability
     include CanCan::Ability

     def initialize(user)

      user ||= User.new #user

        entities = [Kid, Customer, Event, Contact]

         # check if user is 'admin' grant all permissions
       if user.role? :admin
        can :manage, :all
      else
       can :manage, entities
      end

    end
  end

#event_steps.rb

 def create_visitor

             @visitor ||= { :email => "user@example.com",
             :password => "test123",
             :password_confirmation => "test123",
             :role => Role.find_by_name(role.to_s)}
      结尾

我已经尝试了很多方法来自己解决问题,我也用谷歌搜索过,但我无法解决它,而且我对 ruby​​ on rails 和 cucumber 也是新手。如果我是,请指导我错了,您的帮助将不胜感激。 谢谢

【问题讨论】:

    标签: rspec ruby-on-rails-3.2 devise cancan rolify


    【解决方案1】:

    如果你仔细查看堆栈跟踪:

       And I am exists as a parent      # features/step_definitions/kid_steps.rb:106
       undefined local variable or method `role' for #<Cucumber::Rails::World:0xc4722f8> (NameError)
      ./features/step_definitions/event_steps.rb:10:in `create_visitor'
      ./features/step_definitions/event_steps.rb:14:in `create_user'
      ./features/step_definitions/kid_steps.rb:107:in `/^I am exists as a parent$/'
      features/manage_kids.feature:11:in `And I am exists as a parent'
    

    您将找到错误消息undefined local variable or method 'role' 以及引发错误./features/step_definitions/event_steps.rb:10 的源代码的位置,即使使用create_visitor 执行的方法也是如此。

    查看您发布的来源时:

    def create_visitor
      @visitor ||= { :email => "user@example.com",
        :password => "test123", 
        :password_confirmation => "test123", 
        :role => Role.find_by_name(role.to_s)} # i assume that this is line 10!
    end
    

    您可以看到您正在呼叫role。从您发布的代码中,没有定义 role 的地方。必须有一个具有该名称的变量或方法。也许这只是一个错字,你的意思是一个实例变量@role

    我们无能为力,一切尽在您的代码中......

    【讨论】:

    • 感谢 phoet 非常积极的回答,但这对我有帮助,我发现了问题以及我在哪里做错了。实际上,他们应该代替角色:role_ids 需要并且我的问题解决了。
    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多