rspec:模型未定义方法上的助手方法
rspec: Helpers Method on Model undefined method
我的模型中包含的辅助方法出现问题。
我包括以下帮手:
class Booking < ApplicationRecord
include BookingsHelper
include PaymentsHelper
BookingsHelper
和PaymentsHelper
都有slack_notify
的功能。
所以为了调用好的 slack_notify
函数,我调用这个函数如下:
BookingsHelper.slack_notify(self)
PaymentsHelper.slack_notify(requester.email, 'danger', 'booking:proceed_payment', e.message)
当我 运行 我的测试(使用 rspec)时,我得到:
Failure/Error: BookingsHelper.slack_notify(self)
NoMethodError:
undefined method `slack_notify' for BookingsHelper:Module
我注意到如果我更改:BookingsHelper.slack_notify(self)
到 slack_notify(self)
它有效,但在 PaymentsHelper
中调用 slack_notify
所以我真的不明白发生了什么。如果我删除 PaymentHelper
它会调用好的
如果有人可以强调我的这种行为,我真的很想了解发生了什么事
谢谢
你在这里使用了 Mixin。
A mixin can basically be thought of as a set of code that can be added
to one or more classes to add additional capabilities without using
inheritance. In Ruby, a mixin is code wrapped up in a module that a
class can include or extend
您不像静态方法那样访问辅助方法,而是直接调用它们,在您的示例中,您应该直接调用 slack_notify
而无需之前使用模块名称。
当您包含两个具有相同方法名称的模块时,最后一个将覆盖前一个。
如果您不希望它被覆盖,那么您必须在模块中这样定义:
def BookingsHelper.slack_notify
// your code
end
和
def PaymentsHelper.slack_notify
// your code
end
请在此处查看有关 sin
和 cos
的示例:https://www.tutorialspoint.com/ruby/ruby_modules.htm
阅读更多关于 mixins 的内容,您将更好地理解这里发生的事情。
我的模型中包含的辅助方法出现问题。
我包括以下帮手:
class Booking < ApplicationRecord
include BookingsHelper
include PaymentsHelper
BookingsHelper
和PaymentsHelper
都有slack_notify
的功能。
所以为了调用好的 slack_notify
函数,我调用这个函数如下:
BookingsHelper.slack_notify(self)
PaymentsHelper.slack_notify(requester.email, 'danger', 'booking:proceed_payment', e.message)
当我 运行 我的测试(使用 rspec)时,我得到:
Failure/Error: BookingsHelper.slack_notify(self)
NoMethodError:
undefined method `slack_notify' for BookingsHelper:Module
我注意到如果我更改:BookingsHelper.slack_notify(self)
到 slack_notify(self)
它有效,但在 PaymentsHelper
中调用 slack_notify
所以我真的不明白发生了什么。如果我删除 PaymentHelper
它会调用好的
如果有人可以强调我的这种行为,我真的很想了解发生了什么事
谢谢
你在这里使用了 Mixin。
A mixin can basically be thought of as a set of code that can be added to one or more classes to add additional capabilities without using inheritance. In Ruby, a mixin is code wrapped up in a module that a class can include or extend
您不像静态方法那样访问辅助方法,而是直接调用它们,在您的示例中,您应该直接调用 slack_notify
而无需之前使用模块名称。
当您包含两个具有相同方法名称的模块时,最后一个将覆盖前一个。
如果您不希望它被覆盖,那么您必须在模块中这样定义:
def BookingsHelper.slack_notify
// your code
end
和
def PaymentsHelper.slack_notify
// your code
end
请在此处查看有关 sin
和 cos
的示例:https://www.tutorialspoint.com/ruby/ruby_modules.htm
阅读更多关于 mixins 的内容,您将更好地理解这里发生的事情。