diff --git a/lib/commands/new/buildsystems/general/unit-test-runners/jest.js b/lib/commands/new/buildsystems/general/unit-test-runners/jest.js index 1b12899a5..a1ca1b284 100644 --- a/lib/commands/new/buildsystems/general/unit-test-runners/jest.js +++ b/lib/commands/new/buildsystems/general/unit-test-runners/jest.js @@ -2,7 +2,10 @@ const ProjectItem = require('../../../../../project-item').ProjectItem; module.exports = function(project) { - let configureJasmine = require('./jasmine'); + const isUsingBabel = project.model.transpiler.id === 'babel'; + const isUsingTS = project.model.transpiler.id === 'typescript'; + const configureJasmine = require('./jasmine'); + configureJasmine(project); project.addToTasks( @@ -15,94 +18,60 @@ module.exports = function(project) { ).addToDevDependencies( 'jest', 'jest-cli', + 'jest-transform-stub', 'aurelia-loader-nodejs', 'aurelia-pal-nodejs' ).addNPMScript('test', 'au jest'); - if (project.model.transpiler.id === 'babel') { + const transform = { + '^.+\\.(css|less|sass|scss|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': 'jest-transform-stub' + }; + + const moduleFileExtensions = ['js', 'json']; + const setupFiles = []; + const collectCoverageFrom = [ '!**/node_modules/**', '!**/test/**' ]; + let testRegex = '\\.spec\\.'; + + if (isUsingBabel) { project.addToDevDependencies( 'babel-jest', 'babel-core@7.0.0-bridge.0' ); - project.package.jest = { - moduleNameMapper: { - // avoid aurelia-bindings v1+v2 conflict - '^aurelia-binding$': '/node_modules/aurelia-binding' - }, - modulePaths: [ - '/src', - '/node_modules' - ], - moduleFileExtensions: [ - 'js', - 'json' - ], - transform: { - '^.+\\.js$': 'babel-jest' - }, - testRegex: '\\.spec\\.js$', - setupFiles: [ - '/test/jest-pretest.js' - ], - testEnvironment: 'node', - collectCoverage: true, - collectCoverageFrom: [ - 'src/**/*.js', - '!**/*.spec.js', - '!**/node_modules/**', - '!**/test/**' - ], - coverageDirectory: '/test/coverage-jest', - coverageReporters: [ - 'json', - 'lcov', - 'text', - 'html' - ] - }; - } else if (project.model.transpiler.id === 'typescript') { + transform['^.+\\.js$'] = 'babel-jest'; + testRegex += 'js$'; + setupFiles.push('/test/jest-pretest.js'); + collectCoverageFrom.push( 'src/**/*.js', '!**/*.spec.js'); + } else if (isUsingTS) { project.addToDevDependencies( 'ts-jest', '@types/jest' ); - project.package.jest = { - moduleNameMapper: { - // avoid aurelia-bindings v1+v2 conflict - '^aurelia-binding$': '/node_modules/aurelia-binding' - }, - modulePaths: [ - '/src', - '/node_modules' - ], - moduleFileExtensions: [ - 'js', - 'json', - 'ts' - ], - transform: { - '^.+\\.ts$': 'ts-jest' - }, - testRegex: '\\.spec\\.(ts|js)$', - setupFiles: [ - '/test/jest-pretest.ts' - ], - testEnvironment: 'node', - collectCoverage: true, - collectCoverageFrom: [ - 'src/**/*.{js,ts}', - '!**/*.spec.{js,ts}', - '!**/node_modules/**', - '!**/test/**' - ], - coverageDirectory: '/test/coverage-jest', - coverageReporters: [ - 'json', - 'lcov', - 'text', - 'html' - ] - }; + transform['^.+\\.ts$'] = 'ts-jest'; + moduleFileExtensions.push('ts'); + testRegex += '(ts|js)$'; + setupFiles.push('/test/jest-pretest.ts'); + collectCoverageFrom.push( 'src/**/*.{js,ts}', '!**/*.spec.{js,ts}'); } + + project.package.jest = { + moduleNameMapper: { + // avoid aurelia-bindings v1+v2 conflict + '^aurelia-binding$': '/node_modules/aurelia-binding' + }, + modulePaths: [ + '/src', + '/node_modules' + ], + moduleFileExtensions, + transform, + testRegex, + setupFiles, + testEnvironment: 'node', + collectCoverage: true, + collectCoverageFrom, + coverageDirectory: '/test/coverage-jest', + coverageReporters: [ 'json', 'lcov', 'text', 'html'] + }; }; diff --git a/lib/dependencies.json b/lib/dependencies.json index 4e1c2a97a..ff0ec7e13 100644 --- a/lib/dependencies.json +++ b/lib/dependencies.json @@ -67,6 +67,7 @@ "jest-jasmine2": "^23.6.0", "jest-cli": "^23.6.0", "jest-matchers": "^20.0.3", + "jest-transform-stub": "^2.0.0", "json-loader": "^0.5.7", "html-loader": "^0.5.5", "karma": "^3.0.0",