如何模拟Dry-RB(用于Inf改革合同)验证配置方法

时间:2018-11-16 15:01:38

标签: rspec trailblazer reform dry-rb

我的问题是我想模拟自定义验证方法,该方法从DB返回一些数据(ID列表-检查给定的ID是否在我的DB中)。

那么少说话,更多代码: 在我的时事通讯:: Contract :: Create类中

validation do
  configure do
    config.messages_file = "config/error_messages.yml"
    def publisher_exists?(value)
      Publisher.where(id: value).present?
    end
  end
  required(:publisher_id).filled(:publisher_exists?)
end

在测试中,我尝试运行

expect(Newsletter::Contract::Create).to receive(:publisher_exists?).and_return(true)

但显然我收到

Newsletter::Contract::Create does not implement: publisher_exists?

所以问题是什么对象要求我的自定义验证方法,以便我可以对其进行模拟?;]

1 个答案:

答案 0 :(得分:0)

到目前为止,我了解的是可能存在一些eval / anynoumus类,因此,我将模拟在方法内部使用的AR而不是模拟此方法。     expect(Publisher).to receive_message_chain(:where, :present?).and_return(true)