mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-18 16:11:38 +03:00
af6411d5f8
* feat: setup testing for CTA * install with yarn * build before test * add yarn to npm runs for install / test start * add dev mode to link cli.js and api locally * remove fixtures * run tests serially * cli.js build-release avoids webpack error * assert on package.json contents as first check * run tauri build and split out custom asserts * add changefile * shorten workflow name * too short * exclude npm@6 on node@16 * increase timeout, tauri build takes a bit of time * only assert that the tauri script exists
162 lines
4.5 KiB
TypeScript
162 lines
4.5 KiB
TypeScript
// Copyright 2019-2021 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import execa from 'execa'
|
|
import fixtures from 'fixturez'
|
|
const f = fixtures(__dirname)
|
|
import path from 'path'
|
|
import fs from 'fs'
|
|
|
|
const ctaBinary = path.resolve('./bin/create-tauri-app.js')
|
|
const clijs = path.resolve('../cli.js/')
|
|
const api = path.resolve('../api/')
|
|
|
|
const manager = process.env.TAURI_RUN_MANAGER ?? 'npm'
|
|
const recipes = process.env.TAURI_RECIPE
|
|
? [process.env.TAURI_RECIPE]
|
|
: ['vanillajs', 'reactjs', 'reactts', 'vite', 'vuecli']
|
|
const timeoutLong = 900000
|
|
const timeoutLittleLonger = 930000
|
|
const logOut = false ? 'inherit' : 'pipe'
|
|
|
|
beforeAll(async () => {
|
|
const installCLI = await execa('yarn', [], {
|
|
stdio: logOut,
|
|
cwd: clijs,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
const buildCLI = await execa('yarn', ['build-release'], {
|
|
stdio: logOut,
|
|
cwd: clijs,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
const linkCLI = await execa('yarn', ['link'], {
|
|
stdio: logOut,
|
|
cwd: clijs,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
const installAPI = await execa('yarn', [], {
|
|
stdio: logOut,
|
|
cwd: api,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
const buildAPI = await execa('yarn', ['build'], {
|
|
stdio: logOut,
|
|
cwd: api,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
const linkAPI = await execa('yarn', ['link'], {
|
|
stdio: logOut,
|
|
cwd: api,
|
|
timeout: timeoutLong
|
|
})
|
|
}, timeoutLittleLonger)
|
|
|
|
describe('CTA', () => {
|
|
describe.each(recipes.map((recipe) => [recipe, 'tauri-app']))(
|
|
`%s recipe`,
|
|
(recipe: string, appName: string) => {
|
|
it(
|
|
'runs',
|
|
async () => {
|
|
// creates a temp folder to run CTA within (this is our cwd)
|
|
const folder = f.temp()
|
|
const appFolder = path.join(folder, appName)
|
|
|
|
// runs CTA with all args set to avoid any prompts
|
|
const cta = await execa(
|
|
'node',
|
|
[
|
|
ctaBinary,
|
|
'--manager',
|
|
manager,
|
|
'--recipe',
|
|
recipe,
|
|
'--ci',
|
|
'--dev'
|
|
],
|
|
{
|
|
all: true,
|
|
stdio: logOut,
|
|
cwd: folder,
|
|
timeout: timeoutLong
|
|
}
|
|
)
|
|
|
|
// check to make certain it didn't fail anywhere
|
|
expect(cta.failed).toBe(false)
|
|
expect(cta.timedOut).toBe(false)
|
|
expect(cta.isCanceled).toBe(false)
|
|
expect(cta.killed).toBe(false)
|
|
expect(cta.signal).toBe(undefined)
|
|
|
|
// run a tauri build to check if what we produced
|
|
// can actually create an app
|
|
// TODO long term we will want to hook this up to a real test harness
|
|
// and then run that test suite instead
|
|
let opts: string[] = []
|
|
if (manager === 'npm') {
|
|
opts = ['run', 'tauri', '--', 'build']
|
|
} else if (manager === 'yarn') {
|
|
opts = ['tauri', 'build']
|
|
}
|
|
const tauriBuild = await execa(manager, opts, {
|
|
all: true,
|
|
stdio: logOut,
|
|
cwd: appFolder,
|
|
timeout: timeoutLong
|
|
})
|
|
|
|
expect(tauriBuild.failed).toBe(false)
|
|
expect(tauriBuild.timedOut).toBe(false)
|
|
expect(tauriBuild.isCanceled).toBe(false)
|
|
expect(tauriBuild.killed).toBe(false)
|
|
expect(tauriBuild.signal).toBe(undefined)
|
|
|
|
const packageFileOutput: {
|
|
[k: string]: string | object
|
|
} = JSON.parse(
|
|
await fs.promises.readFile(
|
|
path.join(appFolder, 'package.json'),
|
|
'utf-8'
|
|
)
|
|
)
|
|
expect(packageFileOutput['name']).toBe(appName)
|
|
|
|
const assertCustom: { [k: string]: Function } = {
|
|
vanillajs: () => {
|
|
expect(packageFileOutput['scripts']).toMatchObject({
|
|
tauri: 'tauri'
|
|
})
|
|
},
|
|
reactjs: () => {
|
|
expect(packageFileOutput['scripts']).toEqual(
|
|
expect.objectContaining({
|
|
tauri: 'tauri'
|
|
})
|
|
)
|
|
},
|
|
reactts: () => {
|
|
expect(packageFileOutput['scripts']).toEqual(
|
|
expect.objectContaining({
|
|
tauri: 'tauri'
|
|
})
|
|
)
|
|
}
|
|
}
|
|
|
|
const getCustomAsserts = assertCustom[recipe]
|
|
if (getCustomAsserts) getCustomAsserts()
|
|
},
|
|
timeoutLittleLonger
|
|
)
|
|
}
|
|
)
|
|
})
|