UNPKG

4 kBPlain TextView Raw
1import * as npmCheck from 'npm-check'
2
3import validator from '../doctor/packageValidator'
4
5jest.mock('npm-check', () => jest.fn())
6
7jest.mock('../util', () => {
8 return {
9 __esModule: true,
10 getPkgVersion: jest.fn().mockReturnValue('3.0.0-rc.1')
11 }
12})
13
14const cliVersion = '3.0.0-rc.1'
15
16const baseModules = [
17 {
18 moduleName: '@tarojs/components',
19 latest: cliVersion,
20 installed: cliVersion,
21 isInstalled: true
22 },
23 {
24 moduleName: '@tarojs/runtime',
25 latest: cliVersion,
26 installed: cliVersion,
27 isInstalled: true
28 },
29 {
30 moduleName: '@tarojs/taro',
31 latest: cliVersion,
32 installed: cliVersion,
33 isInstalled: true
34 },
35 {
36 moduleName: '@tarojs/mini-runner',
37 latest: cliVersion,
38 installed: cliVersion,
39 isInstalled: true
40 },
41 {
42 moduleName: '@tarojs/webpack-runner',
43 latest: cliVersion,
44 installed: cliVersion,
45 isInstalled: true
46 },
47 {
48 moduleName: 'babel-preset-taro',
49 latest: cliVersion,
50 installed: cliVersion,
51 isInstalled: true
52 },
53 {
54 moduleName: 'eslint-config-taro',
55 latest: cliVersion,
56 installed: cliVersion,
57 isInstalled: true
58 }
59]
60
61describe('package validator of doctor', () => {
62 const npmCheckMocked = npmCheck as jest.Mock<any>
63 const getMocked = jest.fn()
64
65 beforeAll(() => {
66 npmCheckMocked.mockImplementation(() => {
67 return Promise.resolve({
68 get: getMocked
69 })
70 })
71 })
72
73 beforeEach(() => {
74 getMocked.mockClear()
75 })
76
77 it('should report uninstalled modules', async () => {
78 const moduleA = 'redux'
79 const moduleB = 'react-native'
80 getMocked.mockReturnValue([
81 ...baseModules,
82 {
83 moduleName: moduleA,
84 isInstalled: false
85 },
86 {
87 moduleName: 'some-module',
88 isInstalled: true
89 },
90 {
91 moduleName: moduleB,
92 isInstalled: false
93 }
94 ])
95 const { lines } = await validator({ appPath: '' })
96
97 expect(lines.length).toBe(2)
98 expect(lines[0].desc).toBe(`使用到的依赖 ${moduleA} 还没有安装`)
99 expect(lines[0].valid).toBe(false)
100 expect(lines[1].desc).toBe(`使用到的依赖 ${moduleB} 还没有安装`)
101 expect(lines[1].valid).toBe(false)
102 })
103
104 it('should report uninstalled modules', async () => {
105 const latestTaro = '3.0.0-rc.3'
106 const uninstalledTaroPkg = '@tarojs/components'
107 const couldUpdateTaroPkg = '@tarojs/runtime'
108 const inconsistentTaroPkg = '@tarojs/taro'
109
110 getMocked.mockReturnValue([
111 {
112 moduleName: couldUpdateTaroPkg,
113 latest: latestTaro,
114 installed: cliVersion,
115 isInstalled: true
116 },
117 {
118 moduleName: inconsistentTaroPkg,
119 latest: latestTaro,
120 installed: latestTaro,
121 isInstalled: true
122 },
123 ...baseModules.slice(3)
124 ])
125
126 const { lines } = await validator({ appPath: '' })
127
128 expect(lines.length).toBe(3)
129
130 expect(lines[0].desc).toBe(`请安装 Taro 依赖: ${uninstalledTaroPkg}`)
131 expect(lines[0].valid).toBe(true)
132
133 expect(lines[1].desc).toBe(`依赖 ${couldUpdateTaroPkg} 可更新到最新版本 ${latestTaro},当前安装版本为 ${cliVersion}`)
134 expect(lines[1].valid).toBe(true)
135
136 expect(lines[2].desc).toBe(`依赖 ${inconsistentTaroPkg} (${latestTaro}) 与当前使用的 Taro CLI (${cliVersion}) 版本不一致, 请更新为统一的版本`)
137 expect(lines[2].valid).toBe(false)
138 })
139
140 it('should report outdate taro modules', async () => {
141 const moduleB = '@tarojs/components-qa'
142 getMocked.mockReturnValue([
143 ...baseModules,
144 {
145 moduleName: moduleB,
146 isInstalled: false
147 }
148 ])
149
150 const { lines } = await validator({ appPath: '' })
151
152 expect(lines.length).toBe(2)
153
154 expect(lines[0].desc).toBe(`使用到的依赖 ${moduleB} 还没有安装`)
155 expect(lines[0].valid).toBe(false)
156
157 expect(lines[1].desc).toBe(`Taro 3 不再依赖 ${moduleB},可以从 package.json 移除`)
158 expect(lines[1].valid).toBe(true)
159 })
160})