rspec:模型未定义方法上的助手方法

rspec: Helpers Method on Model undefined method

我的模型中包含的辅助方法出现问题。

我包括以下帮手:

class Booking < ApplicationRecord
  include BookingsHelper
  include PaymentsHelper

BookingsHelperPaymentsHelper都有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

请在此处查看有关 sincos 的示例:https://www.tutorialspoint.com/ruby/ruby_modules.htm

阅读更多关于 mixins 的内容,您将更好地理解这里发生的事情。