From b1aade3680aaa1ed8f9419f014c4e7fe2ee2ec77 Mon Sep 17 00:00:00 2001 From: Daniel Stockman Date: Tue, 23 Jul 2019 15:10:08 -0700 Subject: [PATCH] fix(publish): Pass correct arguments to packDirectory() --- .../publish/__tests__/publish-command.test.js | 37 ++++++++++++------- commands/publish/index.js | 4 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/commands/publish/__tests__/publish-command.test.js b/commands/publish/__tests__/publish-command.test.js index f6238a2ce1..93c2d6d417 100644 --- a/commands/publish/__tests__/publish-command.test.js +++ b/commands/publish/__tests__/publish-command.test.js @@ -316,16 +316,18 @@ Map { await lernaPublish(cwd)("--contents", "dist"); - expect(packDirectory).toHaveBeenCalledWith( - expect.objectContaining({ name: "package-1" }), - expect.stringContaining(path.normalize("packages/package-1/dist")), - expect.any(Object) - ); - expect(packDirectory).toHaveBeenCalledWith( - expect.objectContaining({ name: "package-2" }), - expect.stringContaining(path.normalize("packages/package-2/dist")), - expect.any(Object) - ); + const [[pkgOne, dirOne, opts], [pkgTwo, dirTwo]] = packDirectory.mock.calls; + + // second argument to packDirectory() is the location, _not_ the contents + expect(dirOne).toBe(pkgOne.location); + expect(dirTwo).toBe(pkgTwo.location); + + expect(pkgOne.contents).toBe(path.join(pkgOne.location, "dist")); + expect(pkgTwo.contents).toBe(path.join(pkgTwo.location, "dist")); + + // opts is a snapshot of npm-conf instance + expect(packDirectory).toHaveBeenCalledWith(pkgOne, dirOne, opts); + expect(packDirectory).toHaveBeenCalledWith(pkgTwo, dirTwo, opts); }); }); @@ -342,17 +344,24 @@ Map { await lernaPublish(cwd)(); expect(packDirectory).toHaveBeenCalledWith( - expect.objectContaining({ name: "package-1" }), - expect.stringMatching(/packages[\\/]+package-1[\\/]+dist$/), + expect.objectContaining({ + name: "package-1", + contents: path.join(cwd, "packages/package-1/dist"), + }), + path.join(cwd, "packages/package-1"), expect.any(Object) ); expect(packDirectory).toHaveBeenCalledWith( - expect.objectContaining({ name: "package-2" }), - expect.stringMatching(/packages[\\/]+package-2$/), + expect.objectContaining({ + name: "package-2", + contents: path.join(cwd, "packages/package-2"), + }), + path.join(cwd, "packages/package-2"), expect.any(Object) ); }); }); + describe("in a cyclical repo", () => { it("should throw an error with --reject-cycles", async () => { expect.assertions(1); diff --git a/commands/publish/index.js b/commands/publish/index.js index 85e186600d..d4746943c7 100644 --- a/commands/publish/index.js +++ b/commands/publish/index.js @@ -650,8 +650,8 @@ class PublishCommand extends Command { this.options.requireScripts && (pkg => this.execScript(pkg, "prepublish")), pkg => - pulseTillDone(packDirectory(pkg, pkg.contents, opts)).then(packed => { - tracker.verbose("packed", pkg.name, path.relative(this.project.rootPath, pkg.contents)); + pulseTillDone(packDirectory(pkg, pkg.location, opts)).then(packed => { + tracker.verbose("packed", path.relative(this.project.rootPath, pkg.contents)); tracker.completeWork(1); // store metadata for use in this.publishPacked()