robertclarkson / simple-yaml-testdata
使用YAML文件管理测试数据,并简单导出到YAML
Requires
This package is not auto-updated.
Last update: 2024-09-28 20:03:36 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文件。否则,映射不会触发。