From 5aefb989e0d49f5c14b07d4afe7a15e85b27dd3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Tue, 2 Oct 2018 04:23:42 -0700 Subject: [PATCH] run jest tests Summary: Adding support for JS testing. Currently there are two environments tests can run in: node and electron. To select which environment to run a test in, name your test file accordingly `*.node.js` or `*.electron.js` and put it in a `__tests__` folder. - `yarn test` to run node based tests - `yarn test-electron` to run electron tests A basic snapshot test of the empty app is added to make sure the app is rendering as expected. A test for the server is added to make sure when Flipper is started the two servers (secure and insecure) are started and ready to accept connections. Reviewed By: passy Differential Revision: D10050212 fbshipit-source-id: 8ef7f931339b43251d9d423886bcaca99ae691e4 --- .travis.yml | 1 + package.json | 7 +++--- src/__mocks__/init.js | 10 -------- src/__tests__/{App.js => App.electron.js} | 2 -- .../{App.js.snap => App.electron.js.snap} | 8 +++---- .../{server.js => server.electron.js} | 23 ++++++++----------- 6 files changed, 18 insertions(+), 33 deletions(-) delete mode 100644 src/__mocks__/init.js rename src/__tests__/{App.js => App.electron.js} (98%) rename src/__tests__/__snapshots__/{App.js.snap => App.electron.js.snap} (98%) rename src/__tests__/{server.js => server.electron.js} (66%) diff --git a/.travis.yml b/.travis.yml index f7e9dedb8..ffe1b3ece 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,7 @@ matrix: - yarn script: + - yarn test - yarn lint - yarn build --mac --version=$TRAVIS_BUILD_NUMBER diff --git a/package.json b/package.json index f015d4fc8..4467d7e24 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,7 @@ "jest": { "transform": { "\\.(js)$": "/static/transforms/index.js" - }, - "runner": "@jest-runner/electron", - "testEnvironment": "@jest-runner/electron/environment" + } }, "devDependencies": { "@jest-runner/electron": "^0.0.8", @@ -102,7 +100,8 @@ "start": "cross-env NODE_ENV=development node scripts/start-dev-server.js", "build": "yarn rm-dist && cross-env NODE_ENV=production node scripts/build-release.js $@", "fix": "eslint . --fix", - "test": "jest", + "test": "jest --testPathPattern=node\\.js$", + "test-electron": "jest --testPathPattern=electron\\.js$ --testEnvironment=@jest-runner/electron/environment --runner=@jest-runner/electron", "lint": "eslint . && flow check" }, "optionalDependencies": { diff --git a/src/__mocks__/init.js b/src/__mocks__/init.js deleted file mode 100644 index 9c5f81382..000000000 --- a/src/__mocks__/init.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright 2018-present Facebook. - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * @format - */ - -export default function init() { - // no-op -} diff --git a/src/__tests__/App.js b/src/__tests__/App.electron.js similarity index 98% rename from src/__tests__/App.js rename to src/__tests__/App.electron.js index d2b48191e..9c6298ce5 100644 --- a/src/__tests__/App.js +++ b/src/__tests__/App.electron.js @@ -16,8 +16,6 @@ import BugReporter from '../fb-stubs/BugReporter.js'; // create redux store with initial state const mockStore = configureStore([])(reducers(undefined, {type: 'INIT'})); -beforeEach(() => {}); - test('Empty app state matches snapshot', () => { const logger = new Logger(); const bugReporter = new BugReporter(logger); diff --git a/src/__tests__/__snapshots__/App.js.snap b/src/__tests__/__snapshots__/App.electron.js.snap similarity index 98% rename from src/__tests__/__snapshots__/App.js.snap rename to src/__tests__/__snapshots__/App.electron.js.snap index 3eb77b1a2..825e71ad4 100644 --- a/src/__tests__/__snapshots__/App.js.snap +++ b/src/__tests__/__snapshots__/App.electron.js.snap @@ -88,9 +88,9 @@ exports[`Empty app state matches snapshot 1`] = ` title="Toggle Plugins" >
@@ -103,9 +103,9 @@ exports[`Empty app state matches snapshot 1`] = ` title="Toggle Details" >
diff --git a/src/__tests__/server.js b/src/__tests__/server.electron.js similarity index 66% rename from src/__tests__/server.js rename to src/__tests__/server.electron.js index 984a6fde3..8095bcbbe 100644 --- a/src/__tests__/server.js +++ b/src/__tests__/server.electron.js @@ -5,14 +5,21 @@ * @format */ -import type Client from '../Client'; - import Server, {SECURE_PORT, INSECURE_PORT} from '../server.js'; import LogManager from '../fb-stubs/Logger'; +import path from 'path'; +import os from 'os'; +import fs from 'fs'; let server; beforeAll(() => { + // create config directory, which is usually created by static/index.js + const flipperDir = path.join(os.homedir(), '.flipper'); + if (!fs.existsSync(flipperDir)) { + fs.mkdirSync(flipperDir); + } + server = new Server(new LogManager()); }); @@ -21,7 +28,7 @@ test('servers starting at ports', done => { server.addListener('listening', port => { if (!serversToBeStarted.has(port)) { - throw Error(`unknown server started at port ${port}`); + done.fail(Error(`unknown server started at port ${port}`)); } else { serversToBeStarted.delete(port); } @@ -31,16 +38,6 @@ test('servers starting at ports', done => { }); }); -test('Layout plugin is connecting', done => { - server.addListener('new-client', (client: Client) => { - if (client.plugins.indexOf('Inspector -') === -1) { - done.fail(new Error('Layout inspector plugin not found')); - } else { - done(); - } - }); -}); - afterAll(() => { server.close(); });