2017-10-09 85 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中找到相關文檔。