silverstripe/testdata

使用Yaml文件管理测试数据

安装量: 1,076

依赖项: 0

建议者: 0

安全性: 0

星标: 7

关注者: 3

分支: 7

开放问题: 13

类型:silverstripe-module

dev-master 2013-02-07 21:38 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:40:31 UTC


README

维护者

Mateusz Uzdowski

需求

SilverStripe 3 (master) SilverStripe 2.4.x (分支 2.4)

变更日志

2.1

  • 添加 TestDataExporter

2.0

  • 3.0 兼容版本发布

1.0

  • 2.4 兼容版本发布。

安装

  1. 将模块文件夹包含在项目根文件夹中,并将其重命名为 "testdata"
  2. 刷新清单 (?flush=1)

功能

  • 允许通过Yaml文件轻松注入测试数据
  • 数据添加在当前数据库之上
  • 然后可以添加、更新或删除测试数据
  • 测试数据可以分解成块,允许单独的Yaml文件,并且可以动态添加
  • 覆盖了Original YamlFixture类,以允许在yml文件中存在循环引用
  • 创建类似图像的虚拟数据文件(可以是空的,或者内容从具有相同名称的文件复制过来)
  • (新) 自动构建yml文件的导出器 - 只需选择类和ID,它们将自动导出(仅在master上)。

使用方法

您可以通过调用以下命令来获取帮助信息

framework/sake dev/data

您还可以通过浏览器访问该模块。以管理员身份登录,并确保您的站点处于开发模式。然后访问

<site_url>/dev/data

要访问导出器GUI,请访问

<site_url>/dev/data/export

基本工作流程

测试数据Yaml文件应添加到/mysite/testdata目录。文件名不区分大小写,它们需要具有 .yml 扩展名。这些文件的格式与SapphireTest相同,因此您可以自由地在它们之间复制。

让我们从简单的开始。在数据目录中,创建一个名为 media.yml 的文件

Page:
	page:
		Title: Media Releases
	release1:
		Title: Double rainbow seen over Wellington
		Parent: =>Page.page

要添加此数据,运行

dev/data/load/media

如果您想进行一些修改,可以编辑文件

Page:
	page:
		Title: Media Releases
	release1:
		Title: Triple rainbow seen over Wellington
		Content: Really! Saw it with me own eyes!
		Parent: =>Page.page
	release2:
		Title: The claim about double rainbow is a hoax
		Parent: =>Page.page

要更新数据,再次运行该命令

dev/data/load/media

完成后,您可以使用以下命令删除所有数据

dev/data/reset

基本上就是这样。

虚拟文件

模块将自动创建(修改)这些文件,因此它们至少是可用的。

如果您将文件放在/mysite/testdata/files中,其名称与虚拟设置中的名称相同,则内容将自动复制到新创建的文件中。

导出器

导出器已被设计为轻松构建可由人工编辑的数据库转储文件。它将检查所选类并将它们提取到Yaml中。导出器始终在草稿阶段操作,以反映CMS中看到的内容。另一方面,加载器将始终将传入的数据发布到实时状态,因此,结果是将实时阶段的数据完全忽略,以符合Testdata模块的目的。文件将写入数据目录,通常为/mysite/testdata。

通过勾选类名旁边的复选框来进行类选择。括号中的数字表示可用的对象数量,右边的框允许您选择ID。有效的选择包括

  • 显式数字:1,2,3
  • 范围:1-10
  • 两者的组合:1,2,4-7,5

如果请求,导出器还会(如果请求)跟踪关系并包括链接另一侧的对象。例如,选择一个成员将包括他/她所在的组,这反过来又会包括权限。或者如果请求显式ID,例如ID=2的页面,它也会拉取页面的父级,即使其ID不在请求的列表中。这允许轻松构建全面的数据集。

另一个选项是在转储中包含真实文件。导出器将它们存储在/mysite/testdata/files中,不进行嵌套,这意味着如果发生名称冲突,文件将被覆盖。

导出器在团队项目中的使用

导出器现在尊重现有的TestDataTags。这将允许您重新导出之前从其他人导入的对象,而不会更改过程中的标签。

它的工作方式是,导出器内的标签生成器在TestDataTag表中查找对象,并使用那里找到的内容。如果对象之前既未导入也未导出,它将创建一个新的标签并将其写入表。这样,在每个开发人员的机器上创建了一个标签到ID的映射,yml文件变得可移植。

但需要注意的是,对象的映射包括文件名查找,所以请确保您直接导出到相同的文件名(不要在以后重命名文件,因为您将丢失这种映射能力)。

开发人员笔记

  1. 在生产之前从您的数据库中删除TestDataTag表。这将防止错误地删除实时数据。
  2. 记录是根据Yaml文件名和Yaml处理程序跟踪的,因此您需要意识到,如果您更改这些中的任何一个,TestData将认为您已添加了新记录。
  3. 由于上述原因,只要您保留文件名和Yaml处理程序,就可以更新测试记录。它们的ID将保留,因此您的关联将保持不变。
  4. TestData将自动将版本化对象发布到Live,并从两个阶段中删除它们,因此您无需手动执行此操作。
  5. 从项目角度来看,我们发现保留一个包含用于开发和测试的数据的dummy.yml文件很有用,这样每个人至少使用相同的基线。除此之外,ia.yml对于保持初始加载到生产服务器和客户端的干净IA很有用。
  6. 导出器输出文件在其最后3行包含一些元数据,以便更容易进行调试。
  7. 当作为团队工作和使用导出器时,请直接导出到特定的yml文件。否则,映射将不会触发。