diff --git a/packages/babel-helper-transform-fixture-test-runner/package.json b/packages/babel-helper-transform-fixture-test-runner/package.json index 9a4ed2f0b8..f513856e2c 100644 --- a/packages/babel-helper-transform-fixture-test-runner/package.json +++ b/packages/babel-helper-transform-fixture-test-runner/package.json @@ -14,6 +14,7 @@ "@babel/polyfill": "7.0.0-beta.40", "chai": "^4.1.0", "jest": "^22.4.2", + "jest-diff": "^22.4.0", "lodash": "^4.2.0", "resolve": "^1.3.2", "source-map": "^0.5.0" diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index aaa5fe387f..03dda4511e 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -15,6 +15,8 @@ import fs from "fs"; import path from "path"; import vm from "vm"; +import diff from "jest-diff"; + const moduleCache = {}; const testContext = vm.createContext({ ...helpers, @@ -412,7 +414,10 @@ function run(task) { } } else { actualCode = result.code.trim(); - expect(actualCode).toEqual(expectCode); + expect(actualCode).toEqualFile({ + filename: expected.loc, + code: expectCode, + }); if (actualCode) { expect(expected.loc).toMatch( @@ -442,6 +447,28 @@ function run(task) { } } +const toEqualFile = () => ({ + compare: (actual, { filename, code }) => { + const pass = actual === code; + return { + pass, + message: () => { + const diffString = diff(code, actual, { + expand: false, + }); + return ( + `Expected ${filename} to match transform output.\n` + + `To autogenerate a passing version of this file, delete the file and re-run the tests.\n\n` + + `Diff:\n\n${diffString}` + ); + }, + }; + }, + negativeCompare: () => { + throw new Error("Negation unsupported"); + }, +}); + export default function( fixturesLoc: string, name: string, @@ -455,6 +482,10 @@ export default function( if (includes(suiteOpts.ignoreSuites, testSuite.title)) continue; describe(name + "/" + testSuite.title, function() { + jest.addMatchers({ + toEqualFile, + }); + for (const task of testSuite.tests) { if ( includes(suiteOpts.ignoreTasks, task.title) ||