本文将介绍如何添加一个新的实践练习。
要查看还有哪些实践练习尚未实现,最简单的方法是打开轨道的构建页面(例如 https://exercism.org/tracks/csharp/build),然后查看“实践练习”部分。
构建页面上的数据每天更新一次。
在轨道的根目录下运行bin/add-practice-exercise脚本(源码),就能快速生成一个新实践练习的骨架:
bin/add-practice-exercise <exercise-slug>
此外,你还可以选择指定练习的难度(通过-d)和/或作者的 GitHub 用户名(通过-a):
bin/add-practice-exercise -d 3 -a foobar <exercise-slug>
如果你正在维护的轨道仓库里没有这个文件,欢迎通过上面的源码链接把它复制到你的仓库中。
骨架文件创建好之后,你需要做以下几件事:
.meta/config.json文件中:
authors键中config.json文件中:
practices键中(仅当轨道有概念练习时才需要)prerequisites键中(仅当轨道有概念练习时才需要)添加练习的关键一环就是添加测试。 大致来说,为实践练习添加测试时有两种选择:
canonical-data.json文件里的测试用例。https://exercism.org/exercises/<slug>可以查看有哪些轨道实现了某个具体的练习)。第二种选择可能特别有吸引力,因为它能让你很快看到成果。 不过要记住,你应该调整实现,让它最适合你的轨道。 例如,有些轨道不使用类,只用函数。 但如果你的轨道通常使用对象,就应该把实现调整成最适合你轨道的形式。
有些轨道使用测试生成器来自动(重新)生成练习的测试文件。 请查看轨道文档,确认是否有测试生成器,以及如果有的话该如何使用。
为了确保能够写出通过测试的代码,需要添加一个示例实现。
代码不一定要符合惯用写法,只要通过测试就行。
在轨道的根目录下运行bin/verify-exercises脚本(源码),就能验证示例实现是否能通过所有测试:
bin/verify-exercises <exercise-slug>
根据输出确认示例实现通过了所有测试。
如果你正在维护的轨道仓库里没有这个文件,欢迎通过上面的源码链接把它复制到你的仓库中。
在底层,bin/verify-exercises脚本会做几件事:
桩实现文件为学生提供一个起点。
我们建议桩文件只包含最少的代码,做到:
实际操作中,这意味着要定义测试套件所测试的函数/方法。 各个轨道可以自行决定如何组织这些代码,只要保证桩代码一开始会让所有测试失败即可。
Python:
def two_fer(name):
pass
Kotlin:
fun twofer(name: String): String {
TODO("Implement the function to complete the task")
}
最后一步是运行检查器,检查轨道的(配置)文件结构是否正确,包括语法和语义两方面。
首先,运行下面的命令,确保你使用的是最新版本的configlet:
bin/fetch-configlet
接着运行下面的命令,启动检查器:
bin/configlet lint
根据输出确认一切正常。
一切正常之后,就可以向轨道仓库提交 Pull Request了。
提交之前,请阅读贡献者 Pull Request 指南和 Pull Request 指南。
确保 PR 描述中列出了要添加的练习。