Make production tests always run against dist/ (attempt 2) (#2942)

* Make production tests always run against dist/

* Try to mock process.stdin instead of get-stream

* fix: mock `get-stream` from `index.js`

* refactor: remove unnecessary variable

* Try `transform: {}` in jest.config.js

* Add comment explaining the unusual get-stream mocking
This commit is contained in:
Simon Lydell authored and GitHub committed 2017-10-02 17:58:55 +02:00
1 parent 26254ece0f
commit 43cb08c45c
10 files changed
+45 -25

No files matched your search

+2
View File
@@ -11,6 +11,7 @@ const parser = require("./src/parser");
const printDocToDebug = require("./src/doc-debug").printDocToDebug; const printDocToDebug = require("./src/doc-debug").printDocToDebug;
const config = require("./src/resolve-config"); const config = require("./src/resolve-config");
const docblock = require("jest-docblock"); const docblock = require("jest-docblock");
const getStream = require("get-stream");
function guessLineEnding(text) { function guessLineEnding(text) {
const index = text.indexOf("\n"); const index = text.indexOf("\n");
@@ -353,6 +354,7 @@ module.exports = {
/* istanbul ignore next */ /* istanbul ignore next */
__debug: { __debug: {
getStream,
parse: function(text, opts) { parse: function(text, opts) {
return parser.parse(text, opts); return parser.parse(text, opts);
}, },
+2 -1
View File
@@ -13,5 +13,6 @@ module.exports = {
"<rootDir>/src/doc-debug.js", "<rootDir>/src/doc-debug.js",
"<rootDir>/src/clean-ast.js", "<rootDir>/src/clean-ast.js",
"<rootDir>/src/deprecated.js" "<rootDir>/src/deprecated.js"
] ],
transform: {}
}; };
+1 -2
View File
@@ -4,7 +4,6 @@ const path = require("path");
const camelCase = require("camelcase"); const camelCase = require("camelcase");
const dashify = require("dashify"); const dashify = require("dashify");
const minimist = require("minimist"); const minimist = require("minimist");
const getStream = require("get-stream");
const fs = require("fs"); const fs = require("fs");
const globby = require("globby"); const globby = require("globby");
const ignore = require("ignore"); const ignore = require("ignore");
@@ -208,7 +207,7 @@ function applyConfigPrecedence(argv, options) {
} }
function formatStdin(argv) { function formatStdin(argv) {
getStream(process.stdin).then(input => { prettier.__debug.getStream(process.stdin).then(input => {
const filepath = argv["stdin-filepath"] const filepath = argv["stdin-filepath"]
? path.resolve(process.cwd(), argv["stdin-filepath"]) ? path.resolve(process.cwd(), argv["stdin-filepath"])
: process.cwd(); : process.cwd();
+1 -1
View File
@@ -1,4 +1,4 @@
const prettier = require("../.."); const prettier = require("../../tests_config/require_prettier");
test("translates cursor correctly in basic case", () => { test("translates cursor correctly in basic case", () => {
expect(prettier.formatWithCursor(" 1", { cursorOffset: 2 })).toEqual({ expect(prettier.formatWithCursor(" 1", { cursorOffset: 2 })).toEqual({
+6
View File
@@ -0,0 +1,6 @@
"use strict";
const isProduction = process.env.NODE_ENV === "production";
const prettier = require(isProduction ? "../dist/" : "../");
module.exports = prettier;
+1 -2
View File
@@ -1,9 +1,8 @@
"use strict"; "use strict";
const isProduction = process.env.NODE_ENV === "production";
const fs = require("fs"); const fs = require("fs");
const extname = require("path").extname; const extname = require("path").extname;
const prettier = require(isProduction ? "../dist/" : "../"); const prettier = require("./require_prettier");
const parser = require("../src/parser"); const parser = require("../src/parser");
const massageAST = require("../src/clean-ast.js").massageAST; const massageAST = require("../src/clean-ast.js").massageAST;
@@ -3,7 +3,7 @@
const path = require("path"); const path = require("path");
const runPrettier = require("../runPrettier"); const runPrettier = require("../runPrettier");
const prettier = require("../../"); const prettier = require("../../tests_config/require_prettier");
expect.addSnapshotSerializer(require("../path-serializer")); expect.addSnapshotSerializer(require("../path-serializer"));
+1 -1
View File
@@ -1,6 +1,6 @@
"use strict"; "use strict";
const prettier = require("../.."); const prettier = require("../../tests_config/require_prettier");
const runPrettier = require("../runPrettier"); const runPrettier = require("../runPrettier");
const constant = require("../../src/cli-constant"); const constant = require("../../src/cli-constant");
+1 -1
View File
@@ -1,6 +1,6 @@
"use strict"; "use strict";
const prettier = require("../.."); const prettier = require("../../tests_config/require_prettier");
const runPrettier = require("../runPrettier"); const runPrettier = require("../runPrettier");
test("allows custom parser provided as object", () => { test("allows custom parser provided as object", () => {
+29 -16
View File
@@ -3,6 +3,10 @@
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const isProduction = process.env.NODE_ENV === "production";
const prettierApi = isProduction ? "../dist/index" : "../index";
const prettierCli = isProduction ? "../dist/bin/prettier" : "../bin/prettier";
function runPrettier(dir, args, options) { function runPrettier(dir, args, options) {
args = args || []; args = args || [];
options = options || {}; options = options || {};
@@ -11,32 +15,35 @@ function runPrettier(dir, args, options) {
let stdout = ""; let stdout = "";
let stderr = ""; let stderr = "";
const spiedProcessExit = jest.spyOn(process, "exit"); jest.spyOn(process, "exit").mockImplementation(exitCode => {
spiedProcessExit.mockImplementation(exitCode => {
if (status === undefined) { if (status === undefined) {
status = exitCode || 0; status = exitCode || 0;
} }
}); });
const spiedStdoutWrite = jest.spyOn(process.stdout, "write"); jest
spiedStdoutWrite.mockImplementation(text => appendStdout(text)); .spyOn(process.stdout, "write")
.mockImplementation(text => appendStdout(text));
const spiedStderrWrite = jest.spyOn(process.stderr, "write"); jest
spiedStderrWrite.mockImplementation(text => appendStderr(text)); .spyOn(process.stderr, "write")
.mockImplementation(text => appendStderr(text));
const spiedConsoleLog = jest.spyOn(console, "log"); jest
spiedConsoleLog.mockImplementation(text => appendStdout(text + "\n")); .spyOn(console, "log")
.mockImplementation(text => appendStdout(text + "\n"));
const spiedConsoleWarn = jest.spyOn(console, "warn"); jest
spiedConsoleWarn.mockImplementation(text => appendStderr(text + "\n")); .spyOn(console, "warn")
.mockImplementation(text => appendStderr(text + "\n"));
const spiedConsoleError = jest.spyOn(console, "error"); jest
spiedConsoleError.mockImplementation(text => appendStderr(text + "\n")); .spyOn(console, "error")
.mockImplementation(text => appendStderr(text + "\n"));
const write = []; const write = [];
const spiedFsWriteFileSync = jest.spyOn(fs, "writeFileSync"); jest.spyOn(fs, "writeFileSync").mockImplementation((filename, content) => {
spiedFsWriteFileSync.mockImplementation((filename, content) => {
write.push({ filename, content }); write.push({ filename, content });
}); });
@@ -50,12 +57,18 @@ function runPrettier(dir, args, options) {
process.argv = ["path/to/node", "path/to/prettier/bin"].concat(args); process.argv = ["path/to/node", "path/to/prettier/bin"].concat(args);
jest.resetModules(); jest.resetModules();
jest.setMock("get-stream", () => ({
// We cannot use `jest.setMock("get-stream", impl)` here, because in the
// production build everything is bundled into one file so there is no
// "get-stream" module to mock.
jest
.spyOn(require(prettierApi).__debug, "getStream")
.mockImplementation(() => ({
then: handler => handler(options.input || "") then: handler => handler(options.input || "")
})); }));
try { try {
require("../bin/prettier"); require(prettierCli);
status = (status === undefined ? process.exitCode : status) || 0; status = (status === undefined ? process.exitCode : status) || 0;
} catch (error) { } catch (error) {
status = 1; status = 1;