Ruby on rails 如何使用持久化数据测试rails 4?

Ruby on rails 如何使用持久化数据测试rails 4?,ruby-on-rails,minitest,Ruby On Rails,Minitest,我花了几个小时在findin上,了解如何使用新的MiniTest测试rails 4应用程序,似乎每个人都在使用rspec。我正在尝试测试所有级别的应用程序,目前仍停留在如何测试持久数据上,例如,我有用户模型,它属于帐户,我想测试注册和身份验证以及所有身份验证后的事情。目前,我的所有测试都不是持久的,模型级测试会在每次测试运行时创建用户 但是,我希望一些数据是持久的,例如,少数用户帐户,或与帐户链接的项目。我不想每次跑步都重新创建它们。但是我找不到任何关于Rails4和MiniTest的信息 那么

我花了几个小时在findin上,了解如何使用新的MiniTest测试rails 4应用程序,似乎每个人都在使用rspec。我正在尝试测试所有级别的应用程序,目前仍停留在如何测试持久数据上,例如,我有
用户
模型,它属于
帐户
,我想测试注册和身份验证以及所有身份验证后的事情。目前,我的所有测试都不是持久的,模型级测试会在每次测试运行时创建用户

但是,我希望一些数据是持久的,例如,少数用户帐户,或与帐户链接的项目。我不想每次跑步都重新创建它们。但是我找不到任何关于Rails4和MiniTest的信息


那么,我应该使用什么来持久化数据呢?还是seed.rb?如何在控制器\集成测试期间重置数据?

每次测试运行后,测试数据库都会被清除,以确保您有一个干净的记录。通常,您应该测试逻辑。测试数据是否持久化实际上是Rails的工作,它自己的测试套件已经涵盖了这一点

如果您真的想检查持久性,您可以这样做:

  lambda { user.save }.must_change "User.count", +1

但实际上,您应该测试的是您自己的逻辑,而不是数据库是否工作。

每次测试运行后,测试数据库都会被清除,以确保您有一个干净的记录。通常,您应该测试逻辑。测试数据是否持久化实际上是Rails的工作,它自己的测试套件已经涵盖了这一点

如果您真的想检查持久性,您可以这样做:

  lambda { user.save }.must_change "User.count", +1

但实际上,您应该测试的是您自己的逻辑,而不是数据库是否正常工作。

如果我理解正确(并且我不完全确定我是否正确),您可能会发现这正是您想要的,可以提供“持久数据”用于测试。

如果我理解正确(我也不完全确定我是这样做的),您可能会发现,在提供“持久数据”方面,这正是您想要的您可以使用来进行测试。

您应该使用来为测试提供一组默认数据。ActiveSupport::TestCase将把每个测试包装在一个DB事务中,回滚测试之间的所有更改。这意味着您不必做任何工作来重置控制器或集成测试中的DB,它会自动为您进行重置。

您可以应用于为测试提供默认数据集。ActiveSupport::TestCase将在DB事务中封装每个测试,回滚测试之间的所有更改。这意味着您无需在控制器或集成测试中重置DB,它会自动为您重置。每次运行测试时,它们都是r在干净的数据库上运行。正如其他人所说,您应该测试应用程序的逻辑! 您可以使用将持久性添加到测试中。您可以在测试中定义自己的工厂并从中创建对象

例如,定义工厂很容易:

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
end
之后,在测试中,您可以调用此工厂:

# Returns a User instance that's not saved in database
user = FactoryGirl.build(:user)

# Returns a saved (in database) User instance
user = FactoryGirl.create(:user)
此外,您还可以为用户属性提供自己的值:

jane_doe = FactoryGirl.create(:user, first_name: "Jane", last_name: "Doe")
在您的情况下,如果要为Account类创建工厂并向工厂添加关联(用户),请执行以下操作:

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
  factory :account do
    acc_number 123456789
    full_name "John Doe"
    association :user, factory: :user 
  end
end
你可以阅读更多关于FactoryGirl的信息

另外,关于清理数据库,您可以查看。它很容易配置,而且很有效


希望这有帮助!

每次运行测试时,它们都在干净的数据库上运行。正如其他人所说,您应该测试应用程序的逻辑! 您可以使用将持久性添加到测试中。您可以在测试中定义自己的工厂并从中创建对象

例如,定义工厂很容易:

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
end
之后,在测试中,您可以调用此工厂:

# Returns a User instance that's not saved in database
user = FactoryGirl.build(:user)

# Returns a saved (in database) User instance
user = FactoryGirl.create(:user)
此外,您还可以为用户属性提供自己的值:

jane_doe = FactoryGirl.create(:user, first_name: "Jane", last_name: "Doe")
在您的情况下,如果要为Account类创建工厂并向工厂添加关联(用户),请执行以下操作:

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
  factory :account do
    acc_number 123456789
    full_name "John Doe"
    association :user, factory: :user 
  end
end
你可以阅读更多关于FactoryGirl的信息

另外,关于清理数据库,您可以查看。它很容易配置,而且很有效


希望这有帮助!

嘿,它没有那么清晰?…我不明白。你能提供一些你想测试的示例代码吗?嘿,它没有那么清晰?…我不明白。你能提供一些你想测试的示例代码吗?