提问人:Nedim Ramic 提问时间:9/19/2023 更新时间:9/19/2023 访问量:137
使用 Rspec 处理 args 和 kwargs Ruby 3.0 和 3.1
Handling args and kwargs Ruby 3.0 and 3.1 with Rspec
问:
我正在我们的项目中从 Ruby 3.0.6 升级到 Ruby 3.2.2,我遇到了一个奇怪的问题,我在过去几天里试图理解这个问题。 我们使用 RSpec 进行测试,在其中一个测试中,我们有以下代码:
let(:request) { FactoryBot.build(:custom_request) }
context "when not requesting their data" do
let(:mail) { CustomtMailer.request_email(request: request) }
it "renders the headers" do
#expect something
end
end
CustomMailer 类如下所示:
class CustomMailer < ActionMailer::Base
layout "application_mailer"
def request_email(request:, csv: nil)
#some data processing
recipients = request.email
sender = request.sender
subject = "Some subject"
mail(to: recipients, subject: subject, from: sender)
end
好吧,我对现有代码的第一个问题是,虽然request_email是一个实例方法,但它在整个项目中被调用为类方法,并且以某种方式工作??? 第二个问题是 Ruby 2.7.8 和 Ruby 3.0.6 的测试。但是在 Ruby 3.1 测试失败后,我收到此错误:
ArgumentError: wrong number of arguments (given 1, expected 0; required keyword: request)
我的第一个想法是将该方法设为类方法,因为它不使用任何实例变量,但后来我遇到了邮件函数的问题NoMethodError: undefined method 'mail' for CustomMailer:Class
但最令人不安的是,对该方法的调用并没有失败,当我尝试调试并检查参数是如何传递的时,我看到所有参数都是作为位置参数传递的,并且是 args 对象的一部分,而不是 kwargs 对象。
任何想法为什么它以前工作,以及如何解决这个问题?request_email
答: 暂无答案
评论
CustomtMailer
CustomMailer
request_email