Я довольно новичок в TypeScript / JavaScript, но у меня есть работающее расширение VScode, которое меня вполне устраивает.Моя проблема с моими тестами Мокко.У меня есть следующая функция
export async function getPackInfo (): Promise<IPackInfo> {
let validChars = '^[0-9a-zA-Z-]+$'
let ref
ref = await getInput('Pack Reference (lowercase and (-) only)', 'pack-reference', 'my-first-pack')
if (!ref.match(validChars)) {
vscode.window.showErrorMessage('Pack name can only contain letters, numbers and dashes', 'Got it')
return Promise.reject(new Error('Pack name can only contain letters, numbers and dashes. Pack will not be created correctly.'))
}
console.log(ref)
let packname = ref.replace(/-/g, ' ').toLowerCase()
.split(' ')
.map((s) => s.charAt(0).toUpperCase() + s.substring(1))
.join(' ')
console.log(packname)
let author
if (getSetting('defaultAuthor')) {
console.log('Got setting')
author = getSetting('defaultAuthor')
} else {
console.log('Need input')
author = await getInput('Pack Author', 'Pack Author', 'John Doe')
}
console.log(author)
let email
if (getSetting('defaultEmail')) {
email = getSetting('defaultEmail')
} else {
email = await getInput('Author Email', 'Author Email', 'john@example.com')
}
console.log(email)
if (!author || !email) {
throw new Error('Pack author or email not defined')
}
// Write Pack Config File
let data: IPackInfo = {
'ref': ref,
'packname': packname,
'author': author,
'email': email
}
return data
}
Эта функция вызывает другую функцию с именем getInput, которая вызывает vscode.window.showInputBox:
export async function getInput (prompt: string, placeholder: string, defaultValue: string): Promise<string> {
let value = await vscode.window.showInputBox({ prompt: prompt, placeHolder: placeholder, value: defaultValue }).then(function(value) {
if (value) {
resolve(value)
}
throw new Error('No value for prompt')
})
Я пытаюсь проверить, что данные возвращаются правильно вФункция getPackInfo.Мой тест в настоящее время выглядит следующим образом:
it('Check that packname is converted correctly', function (done) {
let mockGetInput
mockGetInput = sinon.stub(vscode.window, 'showInputBox')
mockGetInput.onFirstCall().resolves('ref-pack-here')
mockGetInput.onSecondCall().resolves('Test Author')
mockGetInput.onThirdCall().resolves('example@example.com')
getPackInfo().then((res) => {
let output = res['ref']
console.log(`Output: ${res['packname']}`)
console.log(`Output: ${res['author']}`)
console.log(`Output: ${res['email']}`)
console.log(`Output: ${res['ref']}`)
}).catch(error => {
console.log(error)
})
done()
mockGetInput.restore()
})
Я занимался этим уже несколько дней, но я не могу получить каждый вызов с другим значением!
Первый вызов возвращается правильно, но все последующиеЗвони, ничего не возвращай.
Если есть лучший способ сделать это, я более чем счастлив попробовать!