mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
Add test for deeply nested workspace deps with conflicting versions
Uses real Yarn Berry 4.0.2 generated lockfile with: - 5-level deep workspace dependency chain (e -> d -> c -> b -> a) - Multiple versions of same package (react 16.14.0, 17.0.2, 18.3.1) - Multi-spec resolution (lodash ^4.17.19, ^4.17.20, ^4.17.21 all resolve to 4.17.21) - workspace:^ dependencies throughout Verifies migration and bun ci work correctly with complex version conflicts.
This commit is contained in:
@@ -121,66 +121,86 @@ exports[`Yarn Berry migration v6 format fallback with os/cpu arrays 1`] = `
|
||||
"
|
||||
`;
|
||||
|
||||
exports[`Yarn Berry migration real-world monorepo with Next.js, workspace:^ deps, optional peers, and platform-specific bins 1`] = `
|
||||
exports[`Yarn Berry migration deeply nested workspace dependencies with multiple conflicting versions 1`] = `
|
||||
"{
|
||||
"lockfileVersion": 1,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"name": "nextjs-monorepo",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.0.0",
|
||||
},
|
||||
"name": "complex-deps-monorepo",
|
||||
},
|
||||
"apps/web": {
|
||||
"name": "nextjs-app",
|
||||
"packages/pkg-a": {
|
||||
"name": "pkg-a",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@ui/shared": "workspace:^",
|
||||
"next": "14.1.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"lodash": "^4.17.20",
|
||||
"react": "^18.0.0",
|
||||
},
|
||||
},
|
||||
"packages/shared": {
|
||||
"name": "@ui/shared",
|
||||
"packages/pkg-b": {
|
||||
"name": "pkg-b",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21",
|
||||
"pkg-a": "workspace:^",
|
||||
"react": "^17.0.0",
|
||||
},
|
||||
},
|
||||
"packages/pkg-c": {
|
||||
"name": "pkg-c",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"pkg-a": "workspace:^",
|
||||
"pkg-b": "workspace:^",
|
||||
"react": "^18.2.0",
|
||||
},
|
||||
},
|
||||
"packages/pkg-d": {
|
||||
"name": "pkg-d",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.19",
|
||||
"pkg-c": "workspace:^",
|
||||
"react": "^16.14.0",
|
||||
},
|
||||
},
|
||||
"packages/pkg-e": {
|
||||
"name": "pkg-e",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"pkg-a": "workspace:^",
|
||||
"pkg-d": "workspace:^",
|
||||
"react": "^18.0.0",
|
||||
},
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@next/env": ["@next/env@14.1.0", "", {}, "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw=="],
|
||||
|
||||
"@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@14.1.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ=="],
|
||||
|
||||
"@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@14.1.0", "", { "os": "linux", "cpu": "x64" }, "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ=="],
|
||||
|
||||
"@ui/shared": ["@ui/shared@workspace:packages/shared"],
|
||||
|
||||
"busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="],
|
||||
|
||||
"client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="],
|
||||
|
||||
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
|
||||
|
||||
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
||||
"lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="],
|
||||
|
||||
"next": ["next@14.1.0", "", { "dependencies": { "@next/env": "14.1.0", "@next/swc-darwin-arm64": "14.1.0", "@next/swc-linux-x64-gnu": "14.1.0", "busboy": "1.6.0", "styled-jsx": "5.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q=="],
|
||||
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
||||
|
||||
"nextjs-app": ["nextjs-app@workspace:apps/web"],
|
||||
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
||||
|
||||
"react": ["react@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ=="],
|
||||
"pkg-a": ["pkg-a@workspace:packages/pkg-a"],
|
||||
|
||||
"react-dom": ["react-dom@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0", "react": "^18.2.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g=="],
|
||||
"pkg-b": ["pkg-b@workspace:packages/pkg-b"],
|
||||
|
||||
"scheduler": ["scheduler@0.23.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw=="],
|
||||
"pkg-c": ["pkg-c@workspace:packages/pkg-c"],
|
||||
|
||||
"streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="],
|
||||
"pkg-d": ["pkg-d@workspace:packages/pkg-d"],
|
||||
|
||||
"styled-jsx": ["styled-jsx@5.1.1", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": "*" } }, "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw=="],
|
||||
"pkg-e": ["pkg-e@workspace:packages/pkg-e"],
|
||||
|
||||
"typescript": ["typescript@5.3.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw=="],
|
||||
"prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
|
||||
|
||||
"react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
|
||||
|
||||
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
|
||||
|
||||
"pkg-b/react": ["react@17.0.2", "", { "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="],
|
||||
|
||||
"pkg-d/react": ["react@16.14.0", "", { "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" } }, "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g=="],
|
||||
}
|
||||
}
|
||||
"
|
||||
|
||||
@@ -541,4 +541,272 @@ describe("Yarn Berry migration", () => {
|
||||
expect(stderrInstall).not.toContain("failed to resolve");
|
||||
expect(stderrInstall).not.toContain("failed to parse");
|
||||
});
|
||||
|
||||
test("deeply nested workspace dependencies with multiple conflicting versions", async () => {
|
||||
// This test uses a real yarn.lock generated by Yarn Berry 4.0.2
|
||||
// It has deeply nested workspace deps (pkg-e -> pkg-d -> pkg-c -> pkg-b -> pkg-a)
|
||||
// and multiple versions of the same package (react 16, 17, 18) (lodash 4.17.19, 4.17.20, 4.17.21)
|
||||
using dir = tempDir("yarn-berry-nested-conflicts", {
|
||||
"package.json": JSON.stringify({
|
||||
name: "complex-deps-monorepo",
|
||||
private: true,
|
||||
workspaces: ["packages/*"],
|
||||
}),
|
||||
"yarn.lock": `# This file is generated by running "yarn install" inside your project.
|
||||
# Manual changes might be lost - proceed with caution!
|
||||
|
||||
__metadata:
|
||||
version: 8
|
||||
cacheKey: 10c0
|
||||
|
||||
"complex-deps-monorepo@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "complex-deps-monorepo@workspace:."
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"js-tokens@npm:^3.0.0 || ^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "js-tokens@npm:4.0.0"
|
||||
checksum: e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21":
|
||||
version: 4.17.21
|
||||
resolution: "lodash@npm:4.17.21"
|
||||
checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
|
||||
version: 1.4.0
|
||||
resolution: "loose-envify@npm:1.4.0"
|
||||
dependencies:
|
||||
js-tokens: "npm:^3.0.0 || ^4.0.0"
|
||||
bin:
|
||||
loose-envify: cli.js
|
||||
checksum: 655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
checksum: 1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"pkg-a@workspace:^, pkg-a@workspace:packages/pkg-a":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pkg-a@workspace:packages/pkg-a"
|
||||
dependencies:
|
||||
lodash: "npm:^4.17.20"
|
||||
react: "npm:^18.0.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"pkg-b@workspace:^, pkg-b@workspace:packages/pkg-b":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pkg-b@workspace:packages/pkg-b"
|
||||
dependencies:
|
||||
lodash: "npm:^4.17.21"
|
||||
pkg-a: "workspace:^"
|
||||
react: "npm:^17.0.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"pkg-c@workspace:^, pkg-c@workspace:packages/pkg-c":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pkg-c@workspace:packages/pkg-c"
|
||||
dependencies:
|
||||
pkg-a: "workspace:^"
|
||||
pkg-b: "workspace:^"
|
||||
react: "npm:^18.2.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"pkg-d@workspace:^, pkg-d@workspace:packages/pkg-d":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pkg-d@workspace:packages/pkg-d"
|
||||
dependencies:
|
||||
lodash: "npm:^4.17.19"
|
||||
pkg-c: "workspace:^"
|
||||
react: "npm:^16.14.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"pkg-e@workspace:packages/pkg-e":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pkg-e@workspace:packages/pkg-e"
|
||||
dependencies:
|
||||
pkg-a: "workspace:^"
|
||||
pkg-d: "workspace:^"
|
||||
react: "npm:^18.0.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"prop-types@npm:^15.6.2":
|
||||
version: 15.8.1
|
||||
resolution: "prop-types@npm:15.8.1"
|
||||
dependencies:
|
||||
loose-envify: "npm:^1.4.0"
|
||||
object-assign: "npm:^4.1.1"
|
||||
react-is: "npm:^16.13.1"
|
||||
checksum: 59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-is@npm:^16.13.1":
|
||||
version: 16.13.1
|
||||
resolution: "react-is@npm:16.13.1"
|
||||
checksum: 33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react@npm:^16.14.0":
|
||||
version: 16.14.0
|
||||
resolution: "react@npm:16.14.0"
|
||||
dependencies:
|
||||
loose-envify: "npm:^1.1.0"
|
||||
object-assign: "npm:^4.1.1"
|
||||
prop-types: "npm:^15.6.2"
|
||||
checksum: df8faae43e01387013900e8f8fb3c4ce9935b7edbcbaa77e12999c913eb958000a0a8750bf9a0886dae0ad768dd4a4ee983752d5bade8d840adbe0ce890a2438
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react@npm:^17.0.0":
|
||||
version: 17.0.2
|
||||
resolution: "react@npm:17.0.2"
|
||||
dependencies:
|
||||
loose-envify: "npm:^1.1.0"
|
||||
object-assign: "npm:^4.1.1"
|
||||
checksum: 07ae8959acf1596f0550685102fd6097d461a54a4fd46a50f88a0cd7daaa97fdd6415de1dcb4bfe0da6aa43221a6746ce380410fa848acc60f8ac41f6649c148
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react@npm:^18.0.0, react@npm:^18.2.0":
|
||||
version: 18.3.1
|
||||
resolution: "react@npm:18.3.1"
|
||||
dependencies:
|
||||
loose-envify: "npm:^1.1.0"
|
||||
checksum: 283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
`,
|
||||
});
|
||||
|
||||
// Create workspace packages
|
||||
mkdirSync(join(String(dir), "packages", "pkg-a"), { recursive: true });
|
||||
writeFileSync(
|
||||
join(String(dir), "packages", "pkg-a", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "pkg-a",
|
||||
version: "1.0.0",
|
||||
dependencies: {
|
||||
react: "^18.0.0",
|
||||
lodash: "^4.17.20",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
mkdirSync(join(String(dir), "packages", "pkg-b"), { recursive: true });
|
||||
writeFileSync(
|
||||
join(String(dir), "packages", "pkg-b", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "pkg-b",
|
||||
version: "1.0.0",
|
||||
dependencies: {
|
||||
react: "^17.0.0",
|
||||
lodash: "^4.17.21",
|
||||
"pkg-a": "workspace:^",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
mkdirSync(join(String(dir), "packages", "pkg-c"), { recursive: true });
|
||||
writeFileSync(
|
||||
join(String(dir), "packages", "pkg-c", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "pkg-c",
|
||||
version: "1.0.0",
|
||||
dependencies: {
|
||||
react: "^18.2.0",
|
||||
"pkg-a": "workspace:^",
|
||||
"pkg-b": "workspace:^",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
mkdirSync(join(String(dir), "packages", "pkg-d"), { recursive: true });
|
||||
writeFileSync(
|
||||
join(String(dir), "packages", "pkg-d", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "pkg-d",
|
||||
version: "1.0.0",
|
||||
dependencies: {
|
||||
react: "^16.14.0",
|
||||
lodash: "^4.17.19",
|
||||
"pkg-c": "workspace:^",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
mkdirSync(join(String(dir), "packages", "pkg-e"), { recursive: true });
|
||||
writeFileSync(
|
||||
join(String(dir), "packages", "pkg-e", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "pkg-e",
|
||||
version: "1.0.0",
|
||||
dependencies: {
|
||||
react: "^18.0.0",
|
||||
"pkg-a": "workspace:^",
|
||||
"pkg-d": "workspace:^",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
// Test migration
|
||||
await using procMigrate = Bun.spawn({
|
||||
cmd: [bunExe(), "pm", "migrate"],
|
||||
cwd: String(dir),
|
||||
env: bunEnv,
|
||||
stderr: "pipe",
|
||||
stdout: "pipe",
|
||||
});
|
||||
|
||||
const [stdoutMigrate, stderrMigrate, exitCodeMigrate] = await Promise.all([
|
||||
procMigrate.stdout.text(),
|
||||
procMigrate.stderr.text(),
|
||||
procMigrate.exited,
|
||||
]);
|
||||
|
||||
expect(exitCodeMigrate).toBe(0);
|
||||
const lockContents = await Bun.file(join(String(dir), "bun.lock")).text();
|
||||
expect(lockContents).toMatchSnapshot();
|
||||
|
||||
// Verify multiple versions are preserved
|
||||
expect(lockContents).toContain("react@16.14.0");
|
||||
expect(lockContents).toContain("react@17.0.2");
|
||||
expect(lockContents).toContain("react@18.3.1");
|
||||
|
||||
// Test that bun install --frozen-lockfile works
|
||||
await using procInstall = Bun.spawn({
|
||||
cmd: [bunExe(), "install", "--frozen-lockfile"],
|
||||
cwd: String(dir),
|
||||
env: bunEnv,
|
||||
stderr: "pipe",
|
||||
stdout: "pipe",
|
||||
});
|
||||
|
||||
const [stdoutInstall, stderrInstall, exitCodeInstall] = await Promise.all([
|
||||
procInstall.stdout.text(),
|
||||
procInstall.stderr.text(),
|
||||
procInstall.exited,
|
||||
]);
|
||||
|
||||
expect(exitCodeInstall).toBe(0);
|
||||
expect(stderrInstall).not.toContain("lockfile had changes");
|
||||
expect(stderrInstall).not.toContain("failed to resolve");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user