Factory Girl 能否有效地创建持久性测试 data/artifacts 以用于其他测试?
Can Factory Girl be used to efficiently create persistent test data/artifacts for use in other tests?
我主要用 Selenium 编写 UI 自动化,为了编写真正独立的、并行执行就绪的测试,我需要我的测试来创建和销毁它们需要的任何测试数据(例如用户用于登录的帐户)在 运行 时间动态。
我通常希望 API 我可以在我的 UI 自动化测试用例的设置步骤中利用它来创建这些测试数据,但我被告知即将开展的项目不会有 API 或任何可公开访问的服务来做这样的事情。
我听说开发人员在他们的 Rails 测试中使用 Factory Girl 来创建这样的东西,我希望我可以利用他们已经完成的工作来创建类似的东西数据。我们希望避免必须编写和维护我们自己的数据库注入脚本,或者让 UI 自动化实际尝试通过 UI 等
创建此测试数据
所以!假设我们编写了一些自定义 rspec 测试,这些测试实际上是用于创建测试数据的实用程序,并且能够从被测系统外部远程按需触发它们,那么 Factory Girl 是否可以这样调用不会在 运行 之前清除数据库,也不会破坏它创建的数据?由于开发人员已经确保 Factory Girl 正在为他们的测试创建适当的数据,如果可以的话,利用它并使用它来创建持久测试帐户似乎是个好主意。谢谢!
您要查找的是关闭 RSpec 的 transactional_fixtures
。相应地更新您的 spec_helper 文件。
# spec/spec_helper.rb
RSpec.configure do |config|
# allow test data to persist between transactions
config.use_transactional_fixtures = false
end
这是蛮力法。虽然这对于 UI 端到端测试是可以理解的,但对于单元测试来说并不是一个好主意。这是因为您希望以不依赖于数据库中特定状态的随机、孤立的方式进行单元测试。
一个好的方法是根据测试类型有条件地打开或关闭事务固定装置 运行。
这是一篇关于该主题的文章:https://weilu.github.io/blog/2012/11/10/conditionally-switching-off-transactional-fixtures/
如果您只想为一个测试禁用事务固定装置,您可以在描述块中将其关闭:
describe "YourAwesomeFeature" do
self.use_transactional_fixtures = false
我主要用 Selenium 编写 UI 自动化,为了编写真正独立的、并行执行就绪的测试,我需要我的测试来创建和销毁它们需要的任何测试数据(例如用户用于登录的帐户)在 运行 时间动态。
我通常希望 API 我可以在我的 UI 自动化测试用例的设置步骤中利用它来创建这些测试数据,但我被告知即将开展的项目不会有 API 或任何可公开访问的服务来做这样的事情。
我听说开发人员在他们的 Rails 测试中使用 Factory Girl 来创建这样的东西,我希望我可以利用他们已经完成的工作来创建类似的东西数据。我们希望避免必须编写和维护我们自己的数据库注入脚本,或者让 UI 自动化实际尝试通过 UI 等
创建此测试数据所以!假设我们编写了一些自定义 rspec 测试,这些测试实际上是用于创建测试数据的实用程序,并且能够从被测系统外部远程按需触发它们,那么 Factory Girl 是否可以这样调用不会在 运行 之前清除数据库,也不会破坏它创建的数据?由于开发人员已经确保 Factory Girl 正在为他们的测试创建适当的数据,如果可以的话,利用它并使用它来创建持久测试帐户似乎是个好主意。谢谢!
您要查找的是关闭 RSpec 的 transactional_fixtures
。相应地更新您的 spec_helper 文件。
# spec/spec_helper.rb
RSpec.configure do |config|
# allow test data to persist between transactions
config.use_transactional_fixtures = false
end
这是蛮力法。虽然这对于 UI 端到端测试是可以理解的,但对于单元测试来说并不是一个好主意。这是因为您希望以不依赖于数据库中特定状态的随机、孤立的方式进行单元测试。
一个好的方法是根据测试类型有条件地打开或关闭事务固定装置 运行。
这是一篇关于该主题的文章:https://weilu.github.io/blog/2012/11/10/conditionally-switching-off-transactional-fixtures/
如果您只想为一个测试禁用事务固定装置,您可以在描述块中将其关闭:
describe "YourAwesomeFeature" do
self.use_transactional_fixtures = false