【问题标题】:In rspec can we turn off verify_partial_doubles for one test在 rspec 我们可以为一个测试关闭 verify_partial_doubles
【发布时间】:2014-10-13 03:41:28
【问题描述】:

我的项目在 rspec_helper.rb 文件中设置了这个值

mocks.verify_partial_doubles = true  

我有一个被标记的测试

TaskPublisher does not implement #publish

问题是该方法在对象被实例化之前并不存在。这是基于要发布的任务类型的模块导入。 (元编程)

所以我想知道是否有办法为特定测试关闭verify_partial_doubles,但不会影响其他有价值的测试。

附带问题:不将此标志设置为 true 会使 BDD 成为不可能吗?在我看来,它在 Mocking 的定义(https://stackoverflow.com/tags/mocking/info)面前飞了起来。

【问题讨论】:

    标签: ruby-on-rails rspec mocking


    【解决方案1】:

    [有没有办法为特定测试关闭 [verify_partial_doubles] ..?

    RSpec >= 3.6

    使用without_partial_double_verification

    it 'example' do
      without_partial_double_verification do
        # ...
      end
    end
    

    http://rspec.info/blog/2017/05/rspec-3-6-has-been-released/

    RSpec

    是的,user-defined metadata 和 global "around hook":

    # In your spec ..
    describe "foo", verify_stubs: false do
      # ...
    end
    
    # In spec_helper.rb
    RSpec.configure do |config|
      config.mock_with :rspec do |mocks|
        mocks.verify_partial_doubles = true
      end
    
      config.around(:each, verify_stubs: false) do |ex|
        config.mock_with :rspec do |mocks|
          mocks.verify_partial_doubles = false
          ex.run
          mocks.verify_partial_doubles = true
        end
      end
    end
    

    我相信这项技术的功劳归于Nicholas Rutherford,来自他在rspec-rails issue #1076 的帖子。

    【讨论】:

      【解决方案2】:

      我们最近遇到了类似的问题,最终解决了这个问题:

      config.mock_with :rspec do |mocks|
        mocks.verify_partial_doubles = true
      
        config.around(:example, :without_verify_partial_doubles) do |example|
          mocks.verify_partial_doubles = false
          example.call
          mocks.verify_partial_doubles = true
        end
      end
      

      与 Jared Beck 的回答非常相似,但避免再次致电 mock_with。

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-22
        • 1970-01-01
        相关资源
        最近更新 更多