silverstripe / testdata
使用Yaml文件管理测试数据
Requires
This package is not auto-updated.
Last update: 2024-09-14 13:40:31 UTC
README
维护者
需求
SilverStripe 3 (master) SilverStripe 2.4.x (分支 2.4)
变更日志
2.1
- 添加 TestDataExporter
2.0
- 3.0 兼容版本发布
1.0
- 2.4 兼容版本发布。
安装
- 将模块文件夹包含在项目根文件夹中,并将其重命名为 "testdata"
- 刷新清单 (?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文件变得可移植。
但需要注意的是,对象的映射包括文件名查找,所以请确保您直接导出到相同的文件名(不要在以后重命名文件,因为您将丢失这种映射能力)。
开发人员笔记
- 在生产之前从您的数据库中删除
TestDataTag
表。这将防止错误地删除实时数据。 - 记录是根据Yaml文件名和Yaml处理程序跟踪的,因此您需要意识到,如果您更改这些中的任何一个,TestData将认为您已添加了新记录。
- 由于上述原因,只要您保留文件名和Yaml处理程序,就可以更新测试记录。它们的ID将保留,因此您的关联将保持不变。
- TestData将自动将版本化对象发布到Live,并从两个阶段中删除它们,因此您无需手动执行此操作。
- 从项目角度来看,我们发现保留一个包含用于开发和测试的数据的dummy.yml文件很有用,这样每个人至少使用相同的基线。除此之外,ia.yml对于保持初始加载到生产服务器和客户端的干净IA很有用。
- 导出器输出文件在其最后3行包含一些元数据,以便更容易进行调试。
- 当作为团队工作和使用导出器时,请直接导出到特定的yml文件。否则,映射将不会触发。