如何在Ruby Rails中为类中的辅助方法编写rspec测试?

How to write rspec test for a helper method inside a class in Ruby Rails?

提问人:Alex 提问时间:10/18/2023 最后编辑:Alex 更新时间:10/18/2023 访问量:67

问:

module MyApp
  class V5::Org::LeaveRequests < Base

  helper do
    def leave_requests_for_member!
       error!(...) unless condition
    end

    

我尝试使用我的代码:

    describe_api V5::Org::LeaveRequests do   
      describe '#leave_requests!' do
        context 'when LeaveRequestPolicy.access? is true' do

          it 'does not raise an error' do
            expect { leave_requests_for_member! }.not_to raise_error
          end
      end
    end

我也尝试:subject.send(:require_leave_request_feature!)

但是错误出现了:

got #<NoMethodError: undefined method `leave_requests_for_member!' for #<MyApp::V5::LeaveRequests:0x00007fd2985434c0>

我也尝试:

allow(subject).to receive(:leave_requests_for_member!)
expect { subject.leave_requests_for_member! }.not_to raise_error


#<MyApp::V5::LeaveRequests:0x000072add28 @router=#<Grape::Router:0x00007fd2..>> does not implement: leave_requests_for_member!

你能帮我如何在类中为辅助方法编写 rspec 吗?

Ruby-on-Rails 红宝石 rspec

评论

0赞 max 10/18/2023
帮助程序实际上只是一个模块(在本例中是一个匿名模块),如果您将其包含在内以提供私有方法,那么是否应该直接测试它是值得怀疑的。
0赞 tadman 10/18/2023
“帮助程序”是指 ActionView 帮助程序方法吗?如果是这样,这些只是常规模块。
2赞 mochatiger 10/19/2023
为什么你有这个作为匿名助手?如果它只适用于该类,可能尝试将其设置为普通的实例或类方法。如果它是可重用的(因此是“帮助者”),请将其拉入一个单独的文件中,您可以自行测试这些方法,如下所示: stackoverflow.com/questions/32598844/...
0赞 Les Nightingill 10/19/2023
删除包装的块,然后保留方法。修复 rspec 中的错误。没有AFAIK。它应该是helper do... endleave_requests_for_member!describe_apidescribe MyApp::V5::Org::LeaveRequests do...

答: 暂无答案