RSpec的让!等效于ActiveSupport :: TestCase

时间:2016-08-30 07:47:12

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

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

2 个答案:

答案 0 :(得分:1)

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

UserTest < ActiveSupport::TestCase

  def setup
    @user = User.create
  end

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

end

答案 1 :(得分:0)

这是您的操作方法(这并非万无一失,需要在拆卸时重置哈希值):

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