【TypeScript】GitHub Actions の input をテストする


GitHub Actions には core.getInput などの関数があります。

TypeScript のテストをするには型定義が必要です。

インターフェイスを定義してあげれば、テスト可能になります。

定義
export interface ActionsCore {
  getInput: (name: string) => string
  info: (message: string) => void
  warning: (message: string) => void
}

export class DummyCore {
  input: {[key: string]: string}
  log: [string, string][] = []
  constructor(input: {[key: string]: string}) {
    this.input = input
  }
  getInput(name: string): string {
    return this.input[name] || ''
  }
  info(message: string) {
    this.log.push(['info', message])
  }
  warning(message: string) {
    this.log.push(['warning', message])
  }
}

export async function loadConfigFromInput(core: ActionsCore): Promise<string> {
  core.info('log')
  return core.getInput('foo')
}
呼び出し側
import * as core from '@actions/core'
import {loadConfigFromInput} from './config'

async function main(): Promise<void> {
  const config = await loadConfigFromInput(core)
}
テスト
import {loadConfigFromInput, DummyCore} from './config'
import {expect, test, describe} from '@jest/globals'

test('valid input', async () => {
  const dummy = new DummyCore({
    foo: 'bar'
  })
  expect(await loadConfigFromInput(dummy)).toBe('bar')
})