Skip to content

Commit

Permalink
Merge pull request #742 from huafu/fix-740-no-js-compilation-with-all…
Browse files Browse the repository at this point in the history
…ow-js

Fixes no JS compilation thru TS with allowJs
  • Loading branch information
huafu committed Sep 20, 2018
2 parents 18dced1 + a844fd4 commit ab94359
Show file tree
Hide file tree
Showing 9 changed files with 186 additions and 3 deletions.
10 changes: 10 additions & 0 deletions e2e/__cases__/allow-js/bar.spec.ts
@@ -0,0 +1,10 @@
import * as foo from './foo'
import bar = require('./bar')

test('foo', () => {
expect(foo).toBe('FOO!')
})

test('bar', () => {
expect(bar).toBe('BAR!')
})
1 change: 1 addition & 0 deletions e2e/__cases__/allow-js/bar.ts
@@ -0,0 +1 @@
export = 'BAR!'
1 change: 1 addition & 0 deletions e2e/__cases__/allow-js/foo.js
@@ -0,0 +1 @@
module.exports = 'FOO!'
10 changes: 10 additions & 0 deletions e2e/__cases__/allow-js/foo.spec.js
@@ -0,0 +1,10 @@
const foo = require('./foo')
const bar = require('./bar')

test('foo', () => {
expect(foo).toBe('FOO!')
})

test('bar', () => {
expect(bar).toBe('BAR!')
})
6 changes: 6 additions & 0 deletions e2e/__cases__/allow-js/tsconfig.json
@@ -0,0 +1,6 @@
{
"compilerOptions": {
"target": "es5",
"allowJs": true
}
}
86 changes: 86 additions & 0 deletions e2e/__tests__/__snapshots__/allow-js.test.ts.snap
@@ -0,0 +1,86 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Allow JS test should pass using template "default" 1`] = `
√ jest
↳ exit code: 0
===[ STDOUT ]===================================================================
===[ STDERR ]===================================================================
PASS ./bar.spec.ts
PASS ./foo.spec.js
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: XXs
Ran all test suites.
================================================================================
`;

exports[`Allow JS test should pass using template "with-babel-6" 1`] = `
√ jest
↳ exit code: 0
===[ STDOUT ]===================================================================
===[ STDERR ]===================================================================
PASS ./bar.spec.ts
PASS ./foo.spec.js
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: XXs
Ran all test suites.
================================================================================
`;

exports[`Allow JS test should pass using template "with-babel-7" 1`] = `
√ jest
↳ exit code: 0
===[ STDOUT ]===================================================================
===[ STDERR ]===================================================================
PASS ./bar.spec.ts
PASS ./foo.spec.js
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: XXs
Ran all test suites.
================================================================================
`;

exports[`Allow JS test should pass using template "with-jest-22" 1`] = `
√ jest
↳ exit code: 0
===[ STDOUT ]===================================================================
===[ STDERR ]===================================================================
PASS ./bar.spec.ts
PASS ./foo.spec.js
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: XXs
Ran all test suites.
================================================================================
`;

exports[`Allow JS test should pass using template "with-typescript-2-7" 1`] = `
√ jest
↳ exit code: 0
===[ STDOUT ]===================================================================
===[ STDERR ]===================================================================
PASS ./bar.spec.ts
PASS ./foo.spec.js
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: XXs
Ran all test suites.
================================================================================
`;
14 changes: 14 additions & 0 deletions e2e/__tests__/allow-js.test.ts
@@ -0,0 +1,14 @@
import { allValidPackageSets } from '../__helpers__/templates'
import { configureTestCase } from '../__helpers__/test-case'

describe('Allow JS test', () => {
const testCase = configureTestCase('allow-js')

testCase.runWithTemplates(allValidPackageSets, 0, (runTest, { testLabel }) => {
it(testLabel, () => {
const result = runTest()
expect(result.status).toBe(0)
expect(result).toMatchSnapshot()
})
})
})
59 changes: 57 additions & 2 deletions src/ts-jest-transformer.spec.ts
Expand Up @@ -65,7 +65,7 @@ describe('process', () => {
typescript = { options: {} } as any
})

it('should process input without babel', () => {
it('should process ts input without babel', () => {
expect(process()).toBe(`ts:${INPUT}`)
expect(config.shouldStringifyContent.mock.calls).toMatchInlineSnapshot(`
Array [
Expand All @@ -84,7 +84,28 @@ Array [
`)
})

it('should process input with babel', () => {
it('should process js input without babel', () => {
typescript.options.allowJs = true
args[1] = '/foo/bar.js'
expect(process()).toBe(`ts:${INPUT}`)
expect(config.shouldStringifyContent.mock.calls).toMatchInlineSnapshot(`
Array [
Array [
"/foo/bar.js",
],
]
`)
expect(config.tsCompiler.compile.mock.calls).toMatchInlineSnapshot(`
Array [
Array [
"export default \\"foo\\"",
"/foo/bar.js",
],
]
`)
})

it('should process ts input with babel', () => {
babel = { process: jest.fn(s => `babel:${s}`) }
expect(process()).toBe(`babel:ts:${INPUT}`)
expect(config.shouldStringifyContent.mock.calls).toMatchInlineSnapshot(`
Expand Down Expand Up @@ -116,6 +137,40 @@ Array [
`)
})

it('should process js input with babel', () => {
typescript.options.allowJs = true
babel = { process: jest.fn(s => `babel:${s}`) }
args[1] = '/foo/bar.js'
expect(process()).toBe(`babel:ts:${INPUT}`)
expect(config.shouldStringifyContent.mock.calls).toMatchInlineSnapshot(`
Array [
Array [
"/foo/bar.js",
],
]
`)
expect(config.babelJestTransformer.process.mock.calls).toMatchInlineSnapshot(`
Array [
Array [
"ts:export default \\"foo\\"",
"/foo/bar.js",
Object {},
Object {
"instrument": false,
},
],
]
`)
expect(config.tsCompiler.compile.mock.calls).toMatchInlineSnapshot(`
Array [
Array [
"export default \\"foo\\"",
"/foo/bar.js",
],
]
`)
})

it('should return stringified version of file', () => {
config.shouldStringifyContent.mockImplementation(() => true)
expect(process()).toMatchInlineSnapshot(`"module.exports=\\"export default \\\\\\"foo\\\\\\"\\""`)
Expand Down
2 changes: 1 addition & 1 deletion src/ts-jest-transformer.ts
Expand Up @@ -111,7 +111,7 @@ export class TsJestTransformer implements jest.Transformer {
// we've got a '.js' but the compiler option `allowJs` is not set or set to false
this.logger.warn({ fileName: filePath }, interpolate(Errors.GotJsFileButAllowJsFalse, { path: filePath }))
result = source
} else if (isTsFile) {
} else if (isJsFile || isTsFile) {
// transpile TS code (source maps are included)
result = configs.tsCompiler.compile(source, filePath)
} else {
Expand Down

0 comments on commit ab94359

Please sign in to comment.