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

问题描述 投票:0回答:1

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

我将我的助手包括如下:

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),它可以工作,但是在slack_notify中调用了PaymentsHelper,所以我不太了解发生了什么。如果我删除了PaymentHelper,则称其为“好人”

[如果有人可以在这种行为上突出我,我真的很想了解发生了什么事情

谢谢

ruby-on-rails ruby rspec ruby-on-rails-5
1个回答
1
投票

您在这里使用Mixin。

基本上可以将mixin视为可以添加的一组代码一个或多个类以添加其他功能,而无需使用遗产。在Ruby中,mixin是包装在模块中的代码,类可以包括或扩展

您不会像静态方法那样访问辅助方法,而是直接调用它们,在您的示例中,您应直接调用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

阅读有关mixin的更多信息,您将对这里发生的事情有更好的了解。

© www.soinside.com 2019 - 2024. All rights reserved.