RubyOnRails 类 / 预加载与新
RubyOnRails classes / Preloading vs. new
用例如下:一些外部应用程序发送一个 webhook,rails 应用程序接收。我正在使用自定义 class 将负载重定向到其他地方。
这个习俗 class 几乎总是通过相同的方法做同样的事情。
class代码:
class Retarget
def order_paid(params)
# do some processing
end
end
在控制器中这样使用:
def process_webhook
insert = Retarget.new
data = params.except(:action, :controller)
insert.order_paid(data)
head :ok
end
我的问题如下,如果我想验证是否在请求规范中调用了该方法,显然会失败。下面的一些代码:
it 'triggers' do
... some call that fire the controller action
expect(Retarget).to receive(:order_paid).with(..matching data)
end
在测试控制器请求时仔细检查方法是否被调用对我来说听起来是安全的检查。
我想知道是否可以通过某种方式实现它。或者,如果事情应该单独进行测试——那么我们就可以假设控制器中存在线路 (insert.order_paid(data)
) 就足够了
我的想法是在启动时预加载 class(例如 RetargetWebhook = Retarget.new
在 config/initializers
文件中),因此它可以在任何地方使用;但我想这样做会失败
我不确定你为什么需要一个实例,但为了安全起见,让我们保留它。我建议:
class Retarget
def self.order_paid(params)
new.order_paid(params)
end
def order_paid(params)
# do some processing
end
end
并使用它:
Retarget.order_paid(params.except(:action, :controller))
这样 Retarget.order_paid
将创建实例本身。
其他选项可能会导致使用单例,但我会远离它,因为附加值很少,如果您依赖实例变量并开始记忆,它可能会导致混乱。
用例如下:一些外部应用程序发送一个 webhook,rails 应用程序接收。我正在使用自定义 class 将负载重定向到其他地方。
这个习俗 class 几乎总是通过相同的方法做同样的事情。
class代码:
class Retarget
def order_paid(params)
# do some processing
end
end
在控制器中这样使用:
def process_webhook
insert = Retarget.new
data = params.except(:action, :controller)
insert.order_paid(data)
head :ok
end
我的问题如下,如果我想验证是否在请求规范中调用了该方法,显然会失败。下面的一些代码:
it 'triggers' do
... some call that fire the controller action
expect(Retarget).to receive(:order_paid).with(..matching data)
end
在测试控制器请求时仔细检查方法是否被调用对我来说听起来是安全的检查。
我想知道是否可以通过某种方式实现它。或者,如果事情应该单独进行测试——那么我们就可以假设控制器中存在线路 (insert.order_paid(data)
) 就足够了
我的想法是在启动时预加载 class(例如 RetargetWebhook = Retarget.new
在 config/initializers
文件中),因此它可以在任何地方使用;但我想这样做会失败
我不确定你为什么需要一个实例,但为了安全起见,让我们保留它。我建议:
class Retarget
def self.order_paid(params)
new.order_paid(params)
end
def order_paid(params)
# do some processing
end
end
并使用它:
Retarget.order_paid(params.except(:action, :controller))
这样 Retarget.order_paid
将创建实例本身。
其他选项可能会导致使用单例,但我会远离它,因为附加值很少,如果您依赖实例变量并开始记忆,它可能会导致混乱。