【问题标题】:Why does my FactoryBot definition not see my lambda definition (Ruby,Rspec)为什么我的 FactoryBot 定义看不到我的 lambda 定义(Ruby,Rspec)
【发布时间】:2020-05-25 00:55:52
【问题描述】:

我正在尝试像这样在 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】:

    很可能替换此作业

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

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

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

    将解决问题。

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

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多