【问题标题】:Rails: Premake a model instance for your unit tests (for DRY purposes)?Rails:为您的单元测试预先制作模型实例(用于 DRY 目的)?
【发布时间】:2012-12-04 19:33:29
【问题描述】:

我第一次尝试在我的User 模型中进行自己的测试,我意识到对于每个测试我都有一个user = User.create(:name => "something", :age => 3, :gender => "m") 的声明。是否有用于测试的 before_filter 或类似的东西,这样我就不必为每个测试创建一个用户?或者以某种方式将它放在全局命名空间中,以便在任何地方都可以访问它?

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  test "user is created" do
    user = User.create(:name => "Edmund", :age => 3, :gender => "m")
    assert_equal user, User.find_by_name("Edmund")
    assert_equal 3, User.count
  end

  test "user has sent messages" do
    user = User.create(:name => "Edmund", :age => 3, :gender => "m")
    2.times do 
      user.sent_messages.create(:sender_id => user.id)
    end
    assert_equal 2, user.sent_messages.count
  end

  test "user has received messages" do
    user = User.create(:name => "Edmund", :age => 3, :gender => "m")
    2.times do
      user.received_messages.create(:receiver_id => user.id)
    end
    assert_equal 2, user.received_messages.count
  end


end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    是的,您可以为在每次测试之前运行的测试定义设置方法。如果您在那里定义了一个全局变量,那么它在所有测试用例中都可以访问。

    例如:

    class UserTest < ActiveSupport::TestCase
    
      setup do
        @user = User.create(:name => "Edmund", :age => 3, :gender => "m")
      end
    
      test "user has sent messages" do
        2.times do 
          @user.sent_messages.create(:sender_id => user.id)
        end
        assert_equal 2, @user.sent_messages.count
      end
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多