import fs from 'node:fs';
import path from 'node:path';
import test from '@ava/test';
import {temporaryDirectory} from 'tempy';
import {cwd, fixture} from '../helpers/exec.js';
test('formats errors from ava.config.js', async t => {
const options = {
cwd: cwd('config-errors'),
};
const result = await t.throwsAsync(fixture(['test.js'], options));
const lines = result.stderr.split('\n');
while (lines.length > 1 && lines[0] !== '') {
lines.shift();
}
t.regex(lines[1], /Error loading ava\.config\.js:/);
t.is(lines[2], '');
t.regex(lines[3], /foo/);
});
test('works as expected when run from the package.json directory', async t => {
const options = {
cwd: cwd('pkg-with-tests'),
};
const result = await fixture([], options);
t.snapshot(result.stats.passed, 'resolves test files from configuration');
});
test('resolves tests from the package.json dir if none are specified on cli', async t => {
const options = {
cwd: cwd('pkg-with-tests/dir-a-wrapper'),
};
const result = await fixture([], options);
t.snapshot(result.stats.passed, 'resolves test files from configuration');
});
test('resolves tests from an .mjs config file', async t => {
const options = {
cwd: cwd('mjs-with-tests/dir-a-wrapper'),
};
const result = await fixture([], options);
t.snapshot(result.stats.passed, 'resolves test files from configuration');
});
test('looks for config files outside of project directory', async t => {
const options = {
cwd: cwd('monorepo/package'),
};
const result = await fixture([], options);
t.snapshot(result.stats.passed, 'resolves test files from configuration');
});
test('use current working directory if `package.json` is not found', async t => {
const cwd = temporaryDirectory();
const testFilePath = path.join(cwd, 'test.js');
fs.writeFileSync(testFilePath, 'const test = require(process.env.TEST_AVA_REQUIRE_FROM);\ntest(\'test name\', t => { t.pass(); });');
const options = {
cwd,
};
const result = await fixture([], options);
t.snapshot(result.stats.passed, 'resolves test files without configuration');
});