Rails:为您的单元测试预制一个模型实例(用于干燥目的)?

时间:2022-10-15 22:09:24

I'm trying out testing on my own for the first time in my User model and I realized that for every test I have a statement for user = User.create(:name => "something", :age => 3, :gender => "m"). Is there a before_filter or anything like that for tests so that I don't have to make a user for each test? Or somehow put it in the global namespace so that it's accessible everywhere?

我在我的User模型中第一次尝试自己进行测试,并且我意识到每次测试我都有一个user = User.create(:name =>“something”,:age => 3,:性别=>“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

1 个解决方案

#1


3  

Yes, you can define a setup method for your tests that will run before each test. If you define a global variable there it is accessible in all of the test cases.

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

Ex:

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

#1


3  

Yes, you can define a setup method for your tests that will run before each test. If you define a global variable there it is accessible in all of the test cases.

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

Ex:

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