2017-10-09 64 views
3

据我的理解,Crystal可以在编译时执行单元测试,但我无法找到关于它们的更多信息。编译时的水晶自动化单元测试

可以在编译时执行单元测试吗?如果是的话,我怎样才能在一个新项目中实现它们,我如何给他们提供参数?
例如:如果某些测试需要互联网,我可以以某种方式发送/给予/设置一个参数,以便在没有互联网的情况下取消激活它们。

+0

顺便说一句,你可能想检查Gitter频道(https://gitter.im/crystal-lang/crystal)。人们非常乐于助人,您可以快速解答您的问题。 –

+0

他们是,非常感谢 –

回答

2

虽然不完全是对您的问题的答案,Guard可能适合您。以下是我如何设置它,并且工作得很好。尽管不是水晶碎片,但它是一款在开发环境中非常出色的Ruby gem。

每当我保存一个文件,守卫运行所有的规格(这将是你的单元测试)。我收集所有的代码在运行之前编译。

尽管Crystal Spec(https://crystal-lang.org/api/0.23.1/Spec.html)不提供标记,但您可以指定一个文件夹:crystal spec spec/units。您可以将需要互联网的规格放入其他文件夹。

您可以使用的另一种方法是编写一个编译和运行规格的bash(或Ruby)脚本。

顺便说一句,你可能不想为你的规格,单位或其他使用互联网。你可以使用Webmock或者在测试环境中重新打开你的课程来嘲笑他们。我一直在使用后一种方法,它运行良好。

+0

规范是我一直在寻找的感谢 –

3

本文给出了水晶规格很好的概述:http://ruby-journal.com/crystal/testing-whirlwind-tour-in-crystal-lang/

我建议你永远不会依赖于任何规格外的连接。特别是单元测试应该是可靠的,并且不要因为外部影响(无连接,路由问题,API更改等等)而失败。 设置模拟外部请求以模仿真实目标的基本行为。 只有集成测试可能需要一些真正的API访问权限。

1

您可以在Crystal的Spechere中找到相关文档。