1 | import * as npmCheck from 'npm-check'
|
2 |
|
3 | import validator from '../doctor/packageValidator'
|
4 |
|
5 | jest.mock('npm-check', () => jest.fn())
|
6 |
|
7 | jest.mock('../util', () => {
|
8 | return {
|
9 | __esModule: true,
|
10 | getPkgVersion: jest.fn().mockReturnValue('3.0.0-rc.1')
|
11 | }
|
12 | })
|
13 |
|
14 | const cliVersion = '3.0.0-rc.1'
|
15 |
|
16 | const 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 |
|
61 | describe('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 | })
|