[英]What's the recommended way to unit test a single method in a yeoman generator?
[英]Create yeoman generator with API's calls
我已經創建了一個可以正常工作的 Yeoman 生成器,現在我需要用另外兩個問題來擴展它。
這個問題我已經有了
async prompting() {
const prompts = [
{
name: "appName",
message: "Project name: ",
type: "input",
default: this.props!.appName,
validate(input: string) {
const appName = validateAppName(input);
return !appName[1] ? appName[0] : true;
},
},
{
type: "list",
name: "tech",
message: "Which tech?”,
default: “cloud”,
choices: [{ name: “cloud”}, { name: “onPrem” }}],
},
},
];
現在我需要添加其他問題,例如您要創建項目的命名空間
{
type: “list”,
name: "namespace",
suggestOnly: false,
message: "which namespace: ",
source: Namespace.searchNS,
when: () => !isEmpty(this.namespace!.namespaceInstances),
validate(val: boolean) {
return val
? true
: "choose a namespace where services are provisioned ";
},
},
並且用戶應該選擇一個命名空間(這里的技巧是我需要運行一些邏輯,即 rest 調用以取回命名空間列表),對於這個命名空間,我需要添加另一個問題。 即對於用戶選擇的命名空間,我需要提供服務列表。
使用服務列表,類似這樣的東西。
{
name: "serviceInstanceName",
type: "rawlist",
message:
"Choose a service instance ",
default: this.props!.namespace,
choices: srvInstanceList,
when: () =>
srvInstanceList !== undefined && !isEmpty(srvInstanceList),
},
我需要做什么:
- 運行 API (rest) 調用以獲取命名空間列表,並將其作為列表顯示給用戶
- 當用戶選擇一個特定的命名空間時,我需要做一個新的rest調用來獲取這個命名空間中的所有服務
- 用戶選擇服務
我應該把每個問題的邏輯放在哪里並將其傳遞給下一個問題
我沒有任何代碼示例來支持答案,但如果我是你,我會:
- 運行 API (rest) 調用以獲取命名空間列表,並將其作為列表顯示給用戶
- 當用戶選擇一個特定的命名空間時,我需要做一個新的rest調用來獲取這個命名空間中的所有服務
- 用戶選擇服務
對於命名空間相關的問題,使用將加載所有命名空間的choices
屬性和返回函數。 同樣,對於與服務相關的問題,使用choices
屬性和返回函數來加載命名空間中的所有服務。
這是有關choices
文檔:
選擇:(數組|函數)選擇數組或返回選擇數組的函數。 如果定義為函數,第一個參數將是當前查詢器會話的答案。 數組值可以是簡單的數字、字符串或包含名稱(顯示在列表中)、值(保存在答案散列中)和簡短(選擇后顯示)屬性的對象。
在該函數中,您將獲得第一個參數,其中包含用戶對先前問題給出的答案。
此外,您可以在問題中使用when
屬性來確定是否應根據先前的答案提出或跳過該問題。
參考: https : //github.com/SBoudrias/Inquirer.js/blob/master/README.md
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.