Ruby on rails 如何使用持久化数据测试rails 4?
我花了几个小时在findin上,了解如何使用新的MiniTest测试rails 4应用程序,似乎每个人都在使用rspec。我正在尝试测试所有级别的应用程序,目前仍停留在如何测试持久数据上,例如,我有Ruby on rails 如何使用持久化数据测试rails 4?,ruby-on-rails,minitest,Ruby On Rails,Minitest,我花了几个小时在findin上,了解如何使用新的MiniTest测试rails 4应用程序,似乎每个人都在使用rspec。我正在尝试测试所有级别的应用程序,目前仍停留在如何测试持久数据上,例如,我有用户模型,它属于帐户,我想测试注册和身份验证以及所有身份验证后的事情。目前,我的所有测试都不是持久的,模型级测试会在每次测试运行时创建用户 但是,我希望一些数据是持久的,例如,少数用户帐户,或与帐户链接的项目。我不想每次跑步都重新创建它们。但是我找不到任何关于Rails4和MiniTest的信息 那么
用户
模型,它属于帐户
,我想测试注册和身份验证以及所有身份验证后的事情。目前,我的所有测试都不是持久的,模型级测试会在每次测试运行时创建用户
但是,我希望一些数据是持久的,例如,少数用户帐户,或与帐户链接的项目。我不想每次跑步都重新创建它们。但是我找不到任何关于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的信息
另外,关于清理数据库,您可以查看。它很容易配置,而且很有效
希望这有帮助!嘿,它没有那么清晰?…我不明白。你能提供一些你想测试的示例代码吗?嘿,它没有那么清晰?…我不明白。你能提供一些你想测试的示例代码吗?