为什么我的FactoryBot定义看不到我的lambda定义(Ruby,Rspec)

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

我试图像这样在FactoryBot中定义一个lambda ...

    contact_methods = %w[Phone Email Snail\ Mail Carrier\ Pigeon]

    factory :my_object do
        transient do
          remove_used_value = -> (x,y) { x.reject { |a| a == y }.sample }
        end
        first_contact_option { contact_methods.sample }
        second_contact_option { remove_used_value.call(contact_methods,first_contact_option) }
    end

但是,当我运行FactoryBot.create(:my_object)时,出现错误undefined method remove_used_value for #<FactoryBot::SyntaxRunner:0x00007fb2ac238960>

我将其定义为lambda,因为在Bot中还有其他一些字段需要此功能。奇怪的是,昨天的代码工作正常,只是lambda中的逻辑未返回预期的结果。在重新设计逻辑并在CLI中测试了lambda之后,我发现了可以正常工作的逻辑,但是突然之间却没有意识到lambda在那里。

我的定义有问题吗?另外,还有一种更喜欢的方式来做类似的事情吗?

ruby-on-rails ruby rspec factory-bot
1个回答
0
投票

最有可能取代此作业

remove_used_value = -> (x,y) { x.reject { |a| a == y }.sample }

具有通过块定义的适当动态属性

remove_used_value { -> (x,y) { x.reject { |a| a == y }.sample } }

将解决问题。

((老实说,我会避免这种我无法完全控制的对象属性的随机化-这通常会导致不稳定的规范突然失效,甚至更糟糕的是,应用程序中的细微错误规范未捕获的逻辑;但是我知道这对于特定用例可能是一个很好的解决方案)

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