1
1
import findUp from 'find-up' ;
2
2
import { beforeAll , beforeEach , describe , expect , it , vi } from 'vitest' ;
3
3
4
- import { resolvePackageManager } from '../src/package-manager' ;
5
-
6
4
vi . mock ( 'find-up' , async ( importOriginal ) => {
7
5
const mod = await importOriginal < object > ( ) ;
8
6
return {
@@ -12,7 +10,11 @@ vi.mock('find-up', async (importOriginal) => {
12
10
} ) ;
13
11
14
12
describe ( 'package-manager' , ( ) => {
15
- describe ( 'npm_config_user_agent' , ( ) => {
13
+ // Reset modules for each test because the value of `resolvePackageManager` is cached within the module.
14
+ beforeEach ( ( ) => {
15
+ vi . resetModules ( ) ;
16
+ } ) ;
17
+ describe ( 'npm_config_user_agent' , async ( ) => {
16
18
beforeAll ( ( ) => {
17
19
const originalUa = process . env . npm_config_user_agent ;
18
20
@@ -26,23 +28,27 @@ describe('package-manager', () => {
26
28
{ ua : 'pnpm/10.0.0 npm/? node/v20.11.1 darwin arm64' , pm : 'pnpm' , version : '10.0.0' } ,
27
29
{ ua : 'npm/10.9.2 node/v22.13.0 darwin arm64 workspaces/false' , pm : 'npm' , version : '10.9.2' } ,
28
30
] ) ( 'with $ua' , async ( { ua, pm, version } ) => {
31
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
29
32
process . env . npm_config_user_agent = ua ;
30
33
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , pm ) ;
31
34
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'version' , version ) ;
32
35
} ) ;
33
36
34
37
it ( 'should return yarn if npm_config_user_agent=yarn' , async ( ) => {
38
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
35
39
process . env . npm_config_user_agent = 'yarn/1.22.22 npm/? node/v22.13.0 darwin arm64' ;
36
40
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'yarn' ) ;
37
41
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'version' , '1.22.22' ) ;
38
42
} ) ;
39
43
40
44
it ( 'should return pnpm if npm_config_user_agent=pnpm' , async ( ) => {
45
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
41
46
process . env . npm_config_user_agent = 'pnpm/10.0.0 npm/? node/v20.11.1 darwin arm64' ;
42
47
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'pnpm' ) ;
43
48
} ) ;
44
49
45
50
it ( 'should return npm if npm_config_user_agent=npm' , async ( ) => {
51
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
46
52
process . env . npm_config_user_agent = 'npm/10.9.2 node/v22.13.0 darwin arm64 workspaces/false' ;
47
53
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'npm' ) ;
48
54
} ) ;
@@ -71,11 +77,13 @@ describe('package-manager', () => {
71
77
} ) ;
72
78
73
79
it . each ( [ { pm : 'yarn' } , { pm : 'npm' } , { pm : 'pnpm' } ] ) ( 'should return $pm if NODE_INSTALLER=$pm' , async ( { pm } ) => {
80
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
74
81
process . env . NODE_INSTALLER = pm ;
75
82
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , pm ) ;
76
83
} ) ;
77
84
78
85
it ( 'should return npm if package manager is unsupported' , async ( ) => {
86
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
79
87
process . env . NODE_INSTALLER = 'bun' ;
80
88
console . warn = vi . fn ( ) ;
81
89
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'npm' ) ;
@@ -84,11 +92,13 @@ describe('package-manager', () => {
84
92
} ) ;
85
93
86
94
it ( 'should use the package manager for the nearest ancestor lockfile if detected' , async ( ) => {
95
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
87
96
vi . mocked ( findUp ) . mockResolvedValue ( 'yarn.lock' ) ;
88
97
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'yarn' ) ;
89
98
} ) ;
90
99
91
100
it ( 'should fall back to npm if no other strategy worked' , async ( ) => {
101
+ const { resolvePackageManager } = await import ( '../src/package-manager' ) ;
92
102
process . env . npm_config_user_agent = undefined ;
93
103
vi . mocked ( findUp ) . mockResolvedValue ( undefined ) ;
94
104
await expect ( resolvePackageManager ( ) ) . resolves . toHaveProperty ( 'executable' , 'npm' ) ;
0 commit comments