【问题标题】:RSpec's let! equivalent in ActiveSupport::TestCaseRSpec 让!等效于 ActiveSupport::TestCase
【发布时间】:2016-08-30 07:47:11
【问题描述】:

在 RSpec 中,您可以使用 let!(:user) { User.create } 预先加载 :user 变量,以便在进入测试用例之前创建它。 ActiveSupport::TestCase中是否有等效方法?

【问题讨论】:

  • 你使用的是哪个 Rails/minitest 版本?

标签: ruby-on-rails ruby rspec minitest activesupport


【解决方案1】:

由于TestCase 中的测试基本上是 ruby​​ 类,您始终可以在 setup 方法中为您的测试定义实例变量(这是测试中执行的第一件事):

UserTest < ActiveSupport::TestCase

  def setup
    @user = User.create
  end

  test 'my user test' do
    assert_not @user.nil?
  end

end

【讨论】:

    【解决方案2】:

    你可以这样做(它不是万无一失的,需要在拆卸时重置哈希):

    class ActiveSupport::TestCase
      parallelize(workers: :number_of_processors)
    
      def self.let!(name, &block)
        @@lets ||= {}
        @@lets[name] = block.call
      end
    
      def method_missing(name, *args, &block)
        super if args.any? || block
        @@lets.fetch(name) { super }
      end
    
      def respond_to_missing(name, include_private = false)
        @@lets.has_key?(name) || super
      end
    
      def methods
        super + @@lets.keys
      end
    end
    

    【讨论】:

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