Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
shuding committed Mar 8, 2021
1 parent 6bc158d commit 0096d0b
Show file tree
Hide file tree
Showing 9 changed files with 115 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/next/build/webpack-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ export default async function getBaseWebpackConfig(

const emacsLockfilePattern = '**/.#*'

// Allowing importing TS/TSX files from outside of the project dir.
// Allowing importing TS/TSX files from outside of the root dir.
let externalDir
if (config.experimental.externalDir) {
externalDir = path.join(dir, config.experimental.externalDir)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import React from 'react'

export function World(): JSX.Element {
return <>World</>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
onDemandEntries: {
// Make sure entries are not getting disposed.
maxInactiveAge: 1000 * 60 * 60,
},
experimental: {
externalDir: '../shared',
},
}
16 changes: 16 additions & 0 deletions test/integration/typescript-external-dir/project/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import React from 'react'

import { World } from 'components/world'

// External
import { Counter } from '../../shared/components/counter'

export default function HelloPage(): JSX.Element {
return (
<div>
Hello <World />!
<br />
<Counter />
</div>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* eslint-env jest */

import { join } from 'path'
import cheerio from 'cheerio'
import { renderViaHTTP, findPort, launchApp, killApp } from 'next-test-utils'

jest.setTimeout(1000 * 60 * 2)

const appDir = join(__dirname, '..')
let appPort
let app

async function get$(path, query) {
const html = await renderViaHTTP(appPort, path, query)
return cheerio.load(html)
}

describe('TypeScript Features', () => {
describe('default behavior', () => {
beforeAll(async () => {
appPort = await findPort()
app = await launchApp(appDir, appPort, {})
})
afterAll(() => killApp(app))

it('should render the page with external TS/TSX dependencies', async () => {
const $ = await get$('/')
expect($('body').text()).toMatch(/Hello World!Counter: 0/)
})
})
})
20 changes: 20 additions & 0 deletions test/integration/typescript-external-dir/project/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"compilerOptions": {
"baseUrl": ".",
"esModuleInterop": true,
"module": "esnext",
"jsx": "preserve",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true
},
"exclude": ["node_modules"],
"include": ["next-env.d.ts", "components", "pages"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import React, { useState } from 'react'

import inc from '../libs/inc'

export function Counter(): JSX.Element {
const [x, setX] = useState(0)
return (
<button id="counter" onClick={() => setX(inc(x))}>
Counter: {x}
</button>
)
}
3 changes: 3 additions & 0 deletions test/integration/typescript-external-dir/shared/libs/inc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function inc(x: number) {
return x + 1
}
18 changes: 18 additions & 0 deletions test/integration/typescript-external-dir/shared/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"compilerOptions": {
"esModuleInterop": true,
"module": "esnext",
"jsx": "preserve",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true
},
"include": ["components", "libs"]
}

0 comments on commit 0096d0b

Please sign in to comment.