Ruby on rails 在Rspec中添加控制器宏
我正在尝试为Rspec定义一些控制器宏。我使用rails 3并在spec/support/macros/controller_macros.rb中定义了我的宏,该文件如下所示:Ruby on rails 在Rspec中添加控制器宏,ruby-on-rails,rspec2,Ruby On Rails,Rspec2,我正在尝试为Rspec定义一些控制器宏。我使用rails 3并在spec/support/macros/controller_macros.rb中定义了我的宏,该文件如下所示: module ControllerMacros def self.login_admin #code end end 在我的等级库助手中,我有: config.include(ControllerMacros, :type => :controller) 所以在我的控制器规范中,
module ControllerMacros
def self.login_admin
#code
end
end
在我的等级库助手中,我有:
config.include(ControllerMacros, :type => :controller)
所以在我的控制器规范中,我只是在我的管理测试中调用login\u admin,但是当我使用我得到的方法时
undefined local variable or method `login_admin' for #<Class:0xb6de4854> (NameError)
未定义的局部变量或#的“login_admin”方法(NameError)
起初我假设controller_macros.rb没有被包括在内,但当我在文件中添加一个“puts”时,这表明文件至少正在执行
我看不出我的设置有任何问题,将login\u admin方法复制到descripe块工作正常,因此我不确定它有什么问题。试试看
ControllerMacros.login_admin
或者从方法定义中删除
self
。也许我迟到了,但对于新手来说
下面是一个使用宏的好例子:
当您包含一个模块时,它的方法在示例中可见
但是,当您扩展模块时,其方法仅在示例之外可见
它提供了为每种情况编写宏的方法 一行回答:从方法定义中删除self 为什么?RSpec示例中提供了包含模块的方法
ControllerMacros
中定义的login\u admin
方法将作为login\u admin
具体来说:
重写spec/support/macros/controller\u macros.rb
as
module ControllerMacros
def login_admin
#code
end
end
然后告诉Rspec包含宏
config.include(ControllerMacros,:type=>:controller)
我不是这方面的专家,但我认为这与在类级别定义的方法的作用域(self.)有关。您可能需要使用base.included或base.extended包含或扩展它,或者删除self.sorry self.included或self.extended。这确实有效,但不是rspec真正应该使用的方式抱歉,我不理解您的评论。如果要定义宏,您希望将其包含在许多不同的示例中,不是吗?因此,不需要使用self
定义类方法。或者你是说别的什么?