執行測試套件

Prism 有一個測試套件,用於確保比對正確的令牌。

執行測試套件

執行測試套件很簡單:只要呼叫 npm test

所有測試檔案都是獨立執行的。每個測試案例都會建立新的 Prism 實例。這會讓測試執行器稍微變慢,但我們可以確定沒有任何資料外洩到下一個測試案例。

執行特定語言的測試

若只想針對一種語言執行測試,可以使用 language 參數

npm run test:languages -- --language=markup

你甚至可以指定多種語言

npm run test:languages -- --language=markup --language=css

撰寫測試

感謝撰寫測試!測試很讚!它們確保我們可以在不損壞任何內容的情況下改善程式碼庫。此外,這種方式可以確保升級 Prism 盡可能地輕鬆。

你可以透過在你所處位置的測試目錄 /tests/languages/${language} 中建立一個新的測試案例檔案(檔案副檔名為 .test)來新增測試。

語言目錄

所有測試都整理到 tests/languages 目錄中的目錄中。每個目錄名稱編碼著你目前正在測試的語言。

所有語言名稱都必須與 components.json 中的定義名稱相符。

範例 1:獨立測試語言(預設使用案例)

只要將你的測試檔案放入要測試的語言目錄即可。

因此,如果你要測試 CSS,就把你的測試檔案放入 /tests/languages/css 中就能只測試 CSS。如果你在此目錄中建立一個測試案例,測試執行器就會確保 css 語言定義(包含所有需要的語言定義)正確載入。

範例 2:測試語言注入

如果你要測試語言注入,通常需要載入兩個或更多語言,其中一種語言是正規測試的「主語言」,而其他語言則是注入到主語言中。

你需要透過使用 + 符號分隔來定義多種語言:markup+php

語言會依照順序載入,所以會先載入 markup(以及相依關係),再載入 php(以及相依關係)。測試載入器會確保不會載入語言超過一次(例如,如果兩種語言有相同的相依關係)。

預設情況下,最後一個語言為主語言:php+markup 會將 markup 當為主語言。這等於將你的程式碼放入以下程式碼區塊中

...
<pre><code class="language-markup">
	<!-- your code here -->
</code><pre>
...

如果你需要依照某個順序載入語言,但你不想使用最後一個語言為主語言,可以為主要語言標上驚嘆號:php!+markup。這將使用 php 作為主語言。(你只能定義一個主語言。測試執行器會讓具有多個主語言的目錄中的所有測試失敗。)

注意:透過載入多種語言你可以執行整合測試(確保一起載入兩個或更多語言不會損壞任何內容)。

建立你的測試案例檔案

首先你需要在你想要測試的語言目錄中建立一個新檔案。

為你的測試案例使用適當的名稱。請使用以下慣例之一

你可以使用所有慣例作為前置詞,因此 string_interpolation_feature_inline.test 也可以。但是請花一兩分鐘想想你的測試案例檔的適當名稱。你所撰寫的程式碼不只給電腦看,也給開發者夥伴看。

撰寫你的測試

一個測試案例檔案由兩或三個區段組成,區段以十個或更多個連字號「-」分隔,連字號從行首開始。區段如下

  1. 你的語言片段。你想要使用 Prism 標記化的程式碼。(需要
  2. 您預期的,經過簡化的標記流。必須是有效的 JSON 格式。(可選
    如果不存在,測試執行器將會自動插入它。仔細檢查已插入的標記流是否符合預期。
    如果測試案例失敗是因為 JSON 存在但有錯誤,您可以使用 --update 旗標 來覆寫它。
  3. 一個簡短的註解,說明測試案例。(可選

以下是一個範例

var a = 5;

----------------------------------------------------

[
	["keyword", "var"],
	" a ",
	["operator", "="],
	["number", "5"],
	["punctuation", ";"]
]

----------------------------------------------------

This is a comment explaining this test case.

撰寫測試的簡易方式

建立一個或多個新的測試案例的最簡單方式如下

  1. 建立一個新的測試案例檔案 tests/languages/{language}/{test-case}.test
  2. 插入您要測試的程式碼(僅此而已)。
  3. 對您要的每個測試案例重複前兩個步驟。
  4. 執行 npm run test:languages
  5. 完成。

更新現有的測試案例檔案也很容易!

  1. 執行 npm run test:languages -- --update
  2. 完成。

它的運作方式是讓測試執行器插入您測試程式碼的實際標記流,作為預期的標記流。仔細檢查是否插入的標記流確實符合您的預期,否則測試就沒有意義!

更新測試

在建立和變更語言時,必須更新它們的測試檔案,才能正確測試該語言。您可以使用下列指令自動執行更新測試檔案這個有點繁瑣的任務

npm run test:languages -- --update

更新(覆寫)所有失敗測試檔案的預期標記流。執行這個指令後,語言測試保證會通過。

請記住:這個指令讓建立/更新測試檔案變得容易,但並不表示測試一定會正確。請務必仔細檢查已插入/已更新的標記流!

說明簡化的標記流

在突顯語法時,Prism 會將您的原始程式碼轉換為標記流。這基本上是嵌套標記的樹狀結構(或陣列,或字串)。

由於這些樹狀結構難以手動撰寫,因此測試執行器使用一個簡化的版本。

它使用下列規則

簡化的標記流不包含標記的別名。

如需進一步資訊:閱讀測試執行器的測試(tests/testrunner-tests.js)將有助於您了解轉換的運作方式。

撰寫特定測試

有時候,使用標記流測試不夠強大。您可以建立一個副檔名為 .html.test(而非 .test)的測試檔案,讓 Prism 突顯程式碼的任意片段,並檢查它們的 HTML 結果。

語言是根據包含測試檔案的資料夾來決定的,如前節所述。

例如,您的測試檔案的結構會如下所示

&amp;
&#x41;

----------------------------------------------------

<span class="token entity named-entity" title="&amp;">&amp;amp;</span>
<span class="token entity" title="&#x41;">&amp;#x41;</span>

----------------------------------------------------

This is a comment explaining this test case.

測試執行器測試

測試執行器本身在一個獨立的測試案例中進行測試。您可以在 tests/testrunner-tests.js 中找到所有與「測試核心」相關的測試。

您不應該需要觸碰這個檔案,除非您修改了測試執行器程式碼。

內部結構

整體的測試流程如下

  1. 執行所有內部測試(測試測試執行器)。
  2. 尋找所有語言測試。
  3. 分別執行所有語言測試。
  4. 回報結果。