質問編集履歴
5
該当のソースコードを補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -156,13 +156,15 @@
|
|
156
156
|
|
157
157
|
|
158
158
|
|
159
|
-
const addFunc = () => { ...省略} // 新たに追加した関数をテストしたい
|
159
|
+
const addFunc = (files: File) => { ...省略} // 新たに追加した関数をテストしたい
|
160
160
|
|
161
161
|
|
162
162
|
|
163
163
|
const something = useCallback(
|
164
164
|
|
165
|
+
// ...省略
|
166
|
+
|
165
|
-
addFunc();
|
167
|
+
const foo = addFunc(files);
|
166
168
|
|
167
169
|
);
|
168
170
|
|
4
該当のソースコードを補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -152,6 +152,10 @@
|
|
152
152
|
|
153
153
|
export const SelectFile: React.FC<Props> = () => {
|
154
154
|
|
155
|
+
const rootEl = useRef<HTMLDivElement>(null);
|
156
|
+
|
157
|
+
|
158
|
+
|
155
159
|
const addFunc = () => { ...省略} // 新たに追加した関数をテストしたい
|
156
160
|
|
157
161
|
|
@@ -162,6 +166,28 @@
|
|
162
166
|
|
163
167
|
);
|
164
168
|
|
169
|
+
|
170
|
+
|
171
|
+
useEffect(() => {
|
172
|
+
|
173
|
+
return () => {
|
174
|
+
|
175
|
+
if (rootEl.current) {
|
176
|
+
|
177
|
+
const { current } = rootEl;
|
178
|
+
|
179
|
+
current.removeEventListener("drop", onDrop);
|
180
|
+
|
181
|
+
// ...省略
|
182
|
+
|
183
|
+
}
|
184
|
+
|
185
|
+
};
|
186
|
+
|
187
|
+
});
|
188
|
+
|
189
|
+
|
190
|
+
|
165
191
|
// その他useSelector、useEffect、useCallbackなどの記述
|
166
192
|
|
167
193
|
|
3
該当のソースコードを補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,6 +40,8 @@
|
|
40
40
|
|
41
41
|
```typescript
|
42
42
|
|
43
|
+
//selectFile.spec.tsx
|
44
|
+
|
43
45
|
import * as React from "react";
|
44
46
|
|
45
47
|
import { useSelector, useDispatch } from 'react-redux'
|
@@ -130,7 +132,7 @@
|
|
130
132
|
|
131
133
|
```React
|
132
134
|
|
133
|
-
// テストしたいコンポーネント(一部抜粋)
|
135
|
+
// SelectFile.tsx テストしたいコンポーネント(一部抜粋)
|
134
136
|
|
135
137
|
import styled from "styled-components";
|
136
138
|
|
2
該当のソースコードを補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -42,31 +42,143 @@
|
|
42
42
|
|
43
43
|
import * as React from "react";
|
44
44
|
|
45
|
+
import { useSelector, useDispatch } from 'react-redux'
|
46
|
+
|
45
47
|
import { SelectFile } from "./selectFile";
|
46
48
|
|
49
|
+
import { configure, mount } from "enzyme";
|
50
|
+
|
51
|
+
import * as Adapter from "enzyme-adapter-react-16";
|
52
|
+
|
47
53
|
import EnzymeToJson from "enzyme-to-json";
|
48
54
|
|
49
|
-
import { configure, mount } from "enzyme";
|
50
|
-
|
51
|
-
import * as Adapter from "enzyme-adapter-react-16";
|
52
|
-
|
53
55
|
|
54
56
|
|
55
57
|
configure({ adapter: new Adapter() });
|
56
58
|
|
57
59
|
|
58
60
|
|
61
|
+
// useSelector,useDispatchのエラーが出たのでmock を追加
|
62
|
+
|
63
|
+
jest.mock('src/selectors')
|
64
|
+
|
65
|
+
jest.mock('react-redux')
|
66
|
+
|
67
|
+
const useSelectorMock = useSelector as jest.Mock
|
68
|
+
|
69
|
+
const useDispatchMock = useDispatch as jest.Mock
|
70
|
+
|
59
71
|
const dummyProps = {
|
60
72
|
|
61
73
|
select: "basic",
|
62
74
|
|
63
75
|
};
|
64
76
|
|
77
|
+
describe("dicom-uploader.ts", () => {
|
78
|
+
|
79
|
+
beforeEach(() => {
|
80
|
+
|
81
|
+
useSelectorMock.mockReturnValue(10)
|
82
|
+
|
83
|
+
useDispatchMock.mockReturnValue(jest.fn())
|
84
|
+
|
85
|
+
})
|
86
|
+
|
87
|
+
afterEach(() => {
|
88
|
+
|
89
|
+
jest.resetAllMocks();
|
90
|
+
|
91
|
+
})
|
92
|
+
|
65
|
-
it("should render default SelectFile", () => {
|
93
|
+
it("should render default SelectFile", () => {
|
66
|
-
|
94
|
+
|
67
|
-
const mounted = mount(<SelectFile {...dummyProps} />);
|
95
|
+
const mounted = mount(<SelectFile {...dummyProps} />);
|
68
|
-
|
96
|
+
|
69
|
-
// ↑でテストが止まります
|
97
|
+
// ↑でテストが止まります
|
98
|
+
|
99
|
+
```
|
100
|
+
|
101
|
+
コンポーネント(エラーなく動作している)
|
102
|
+
|
103
|
+
```React
|
104
|
+
|
105
|
+
// 親コンポーネント(一部抜粋)
|
106
|
+
|
107
|
+
return (
|
108
|
+
|
109
|
+
<Root>
|
110
|
+
|
111
|
+
{(() => {
|
112
|
+
|
113
|
+
switch(...){
|
114
|
+
|
115
|
+
return <SelectFile /> // 今回テストしたいコンポーネント
|
116
|
+
|
117
|
+
default:
|
118
|
+
|
119
|
+
return <Foo />
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
})()}
|
124
|
+
|
125
|
+
</Root>
|
126
|
+
|
127
|
+
);
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
```React
|
132
|
+
|
133
|
+
// テストしたいコンポーネント(一部抜粋)
|
134
|
+
|
135
|
+
import styled from "styled-components";
|
136
|
+
|
137
|
+
import ...省略
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
const Wrapper = styled.div`
|
142
|
+
|
143
|
+
...省略(cssプロパティ)
|
144
|
+
|
145
|
+
`;
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
export type Props = {...省略}
|
150
|
+
|
151
|
+
export const SelectFile: React.FC<Props> = () => {
|
152
|
+
|
153
|
+
const addFunc = () => { ...省略} // 新たに追加した関数をテストしたい
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
const something = useCallback(
|
158
|
+
|
159
|
+
addFunc();
|
160
|
+
|
161
|
+
);
|
162
|
+
|
163
|
+
// その他useSelector、useEffect、useCallbackなどの記述
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
return (
|
168
|
+
|
169
|
+
<Wrapper ref={rootEl}> <!-- テストではここでエラーとなっている -->
|
170
|
+
|
171
|
+
<!-- HTML要素、コンポーネントなど -->
|
172
|
+
|
173
|
+
</Wrapper>
|
174
|
+
|
175
|
+
);
|
176
|
+
|
177
|
+
};
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
export default DicomUploader;
|
70
182
|
|
71
183
|
```
|
72
184
|
|
1
説明について文言修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
### 前提
|
2
2
|
|
3
|
-
React初心者です。
|
3
|
+
React・テストコード初心者です。
|
4
4
|
|
5
5
|
親子関係のあるコンポーネントの中の
|
6
6
|
|
7
|
-
子コンポーネント内の静的メソッドのテストコードを作成しようとしています。
|
7
|
+
子コンポーネント内の静的メソッドのテストコードを作成しようとしています。
|
8
8
|
|
9
9
|
(jestとenzymeを使用)
|
10
10
|
|
@@ -76,9 +76,9 @@
|
|
76
76
|
|
77
77
|
Reactの何かが読み込めていないため`createElement`がないというエラーになっていると考えました。
|
78
78
|
|
79
|
-
既存の構造の都合で`src`以外の場所からもimportしているため、パスの問題もあるかと思い、
|
79
|
+
既存の構造の都合で子コンポーネントでは`src`以外の場所からもファイルをimportしているため、パスの問題もあるかと思い、
|
80
80
|
|
81
|
-
jest.config.jsでモジュールのパス設定を変更してみました
|
81
|
+
jest.config.jsでモジュールのパス設定を変更してみました。しかし、エラーは解消されませんでした。
|
82
82
|
|
83
83
|
```diff
|
84
84
|
|
@@ -110,6 +110,8 @@
|
|
110
110
|
|
111
111
|
"enzyme": "3.11.0",
|
112
112
|
|
113
|
+
```
|
114
|
+
|
113
115
|
リポジトリ内ではreducerやstoreのテストコードは存在していて、テストはパスしています。
|
114
116
|
|
115
117
|
スナップショットも動作しています。
|