【问题标题】:How to stub a method in ActiveSupport::TestCase如何在 ActiveSupport::TestCase 中存根方法
【发布时间】:2016-08-10 07:44:55
【问题描述】:

RSpec 我可以这样存根方法:

allow(company).to receive(:foo){300}

如何使用ActiveSupport::TestCase 存根方法?

我有一个这样的测试。

class CompanyTest < ActiveSupport::TestCase
  test 'foobar' do
    company = companies(:base)
    #company.stubs(:foo).returns(300)
    assert_nil(company.calculate_bar)
  end
end

【问题讨论】:

    标签: ruby-on-rails testcase


    【解决方案1】:

    Minitest 带有一个开箱即用的stub 方法,以防您不想使用外部工具:

    require 'minitest/mock'
    class CompanyTest < ActiveSupport::TestCase
      test 'foobar' do
        company = companies(:base)
        Company.stub :foo, 300 do
          assert_nil(company.calculate_bar)
        end
      end
    end
    

    【讨论】:

      【解决方案2】:

      Minitest 有一些有限的模拟功能,但我建议对这些类型的存根使用 mocha gem。

      Mocha 的语法正是你在注释掉的那一行:

      class CompanyTest < ActiveSupport::TestCase
        test 'foobar' do
          company = companies(:base)
          company.stubs(:foo).returns(300)
          assert_nil(company.calculate_bar)
        end
      end
      

      【讨论】:

        【解决方案3】:

        增强@Farrukh 答案:

        如果你想验证传递的参数,比如allow(company).to receive(:foo).with(some_args).and_return(300)

        您可以使用assert_called_with

        # requiring may not be needed, depending on ActiveSupport version
        require "active_support/testing/method_call_assertions.rb"
        include ActiveSupport::Testing::MethodCallAssertions  # so we can use `assert_called_with`
         
        assert_called_with(company, :foo, some_args, returns: 300) do
          assert_nil(company.calculate_bar)
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-12
          相关资源
          最近更新 更多