У меня есть проект Node, написанный на TypeScript, который использует Rollup в качестве компоновщика и Jest в качестве фреймворка для модульного тестирования. Он имеет следующую структуру (я пропустил материал, который, я думаю, не имеет значения для вопроса):
__tests__
greeter.test.ts
config.json
config
template.config.json
src
modules
greeter.ts
index.ts
jest.config.ts
package.json
tsconfig.json
SRC / index.ts:
import { greeter } from './modules/greeter'
console.log(greeter('Bojan'))
SRC / модули / greeter.ts:
const config = require('./config.json')
const greeting = config.greeting;
console.log(greeting)
export function greeter(name: string): string {
return greeting + ", " + name
}
__ __ тесты / greeter.test.ts:
import {greeter} from '../src/modules/greeter';
test('greeter uses greeting specifies in the configuration file', () => {
expect(greeter('ABC')).toBe('hi, ABC');
});
test('greeter uses the name specified as its runtime argument', () => {
expect(greeter('ABC')).toContain('ABC');
});
jest.config.js:
module.exports = {
"verbose": true,
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
// "moduleDirectories": [
// "node_modules",
// "<rootDir>/__tests__/"
// ],
// "modulePaths": [
// "<rootDir>/__tests__/"
// ]
};
package.json:
{
...
"main": "index.js",
"scripts": {
"clean": "rm -rf ./build/",
"test": "jest --verbose --coverage --debug --env node",
"build": "npx rollup -c",
"start": "node ./build/app.js"
},
...
"devDependencies": {
"@types/jest": "^24.0.11",
"@types/node": "^11.13.0",
"jest": "^24.7.1",
"rollup": "^1.9.0",
"rollup-plugin-copy": "^1.0.0",
"rollup-plugin-typescript": "^1.0.1",
"ts-jest": "^24.0.2",
"tslib": "^1.9.3",
"typescript": "^3.4.2"
},
"dependencies": {}
}
Идея состоит в том, что build создает пакет app.js
, который читает конфигурацию из config.json
, которая должна находиться в том же каталоге.
config.json:
{
"greeting": "hi"
}
Пакет app.js
содержит:
var config = require('./config.json');
... и запуск app.js
работает нормально (при условии config.json
), но когда я запускаю npm test
(или просто npx jest
), выдает ошибки Jest с:
FAIL __tests__/greeter.test.ts
● Test suite failed to run
Cannot find module './config.json' from 'greeter.ts'
However, Jest was able to find:
'../src/modules/greeter.ts'
You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'json', 'jsx', 'ts', 'tsx', 'node'].
See https://jestjs.io/docs/en/configuration#modulefileextensions-array-string
> 1 | const config = require('./config.json')
| ^
2 | const greeting = config.greeting;
3 | console.log(greeting)
4 |
at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:229:17)
at Object.<anonymous> (src/modules/greeter.ts:1:16)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 1.03s
Ran all test suites.
Чтобы исправить эту ошибку, мне нужно оставить config.json
(используется только для модульного тестирования) рядом с greeter.ts
(в src/modules
), но я бы хотел оставить его в __tests__
. Я попытался изменить moduleDirectories и modulePaths в конфигурационном файле Jest безрезультатно.
Есть ли способ сделать config.json
видимым для greeter.ts
модуля при тестировании Jest, сохраняя его видимость из пакета app.js
во время выполнения?