|
| 1 | +import type { LabelInValueType } from '@/Select'; |
1 | 2 | import { fireEvent, render as testingRender } from '@testing-library/react';
|
2 | 3 | import { mount, render } from 'enzyme';
|
3 | 4 | import KeyCode from 'rc-util/lib/KeyCode';
|
@@ -2115,6 +2116,70 @@ describe('Select.Basic', () => {
|
2115 | 2116 | );
|
2116 | 2117 | });
|
2117 | 2118 |
|
| 2119 | + it('labelRender', () => { |
| 2120 | + const onLabelRender = jest.fn(); |
| 2121 | + const labelRender = (props: LabelInValueType) => { |
| 2122 | + const { label, value } = props; |
| 2123 | + onLabelRender(); |
| 2124 | + return `${label}-${value}`; |
| 2125 | + }; |
| 2126 | + const wrapper = mount( |
| 2127 | + <Select options={[{ label: 'realLabel', value: 'a' }]} value="a" labelRender={labelRender} />, |
| 2128 | + ); |
| 2129 | + |
| 2130 | + expect(onLabelRender).toHaveBeenCalled(); |
| 2131 | + expect(findSelection(wrapper).text()).toEqual('realLabel-a'); |
| 2132 | + }); |
| 2133 | + |
| 2134 | + it('labelRender when value is not in options', () => { |
| 2135 | + const onLabelRender = jest.fn(); |
| 2136 | + const options = [{ label: 'realLabel', value: 'b' }]; |
| 2137 | + const labelRender = (props: LabelInValueType) => { |
| 2138 | + const { label, value } = props; |
| 2139 | + // current value is in options |
| 2140 | + if (options.find((item) => item.value === value)) { |
| 2141 | + return label; |
| 2142 | + } else { |
| 2143 | + // current value is not in options |
| 2144 | + onLabelRender(); |
| 2145 | + return `${label || 'fakeLabel'}-${value}`; |
| 2146 | + } |
| 2147 | + }; |
| 2148 | + const wrapper = mount(<Select value="a" labelRender={labelRender} options={options} />); |
| 2149 | + |
| 2150 | + expect(onLabelRender).toHaveBeenCalled(); |
| 2151 | + expect(findSelection(wrapper).text()).toEqual('fakeLabel-a'); |
| 2152 | + }); |
| 2153 | + |
| 2154 | + it('labelRender when labelInValue and useCache', () => { |
| 2155 | + const onLabelRender = jest.fn(); |
| 2156 | + const labelRender = (props: LabelInValueType) => { |
| 2157 | + const { label, value } = props; |
| 2158 | + onLabelRender({ label, value }); |
| 2159 | + return `custom label`; |
| 2160 | + }; |
| 2161 | + |
| 2162 | + const wrapper = mount( |
| 2163 | + <Select |
| 2164 | + labelInValue |
| 2165 | + value={{ key: 1, label: 'One' }} |
| 2166 | + labelRender={labelRender} |
| 2167 | + options={[ |
| 2168 | + { |
| 2169 | + value: 2, |
| 2170 | + label: 'Two', |
| 2171 | + }, |
| 2172 | + ]} |
| 2173 | + />, |
| 2174 | + ); |
| 2175 | + |
| 2176 | + expect(onLabelRender).toHaveBeenCalledWith({ label: 'One', value: 1 }); |
| 2177 | + expect(findSelection(wrapper).text()).toEqual('custom label'); |
| 2178 | + |
| 2179 | + wrapper.setProps({ options: [] }); |
| 2180 | + expect(findSelection(wrapper).text()).toEqual('custom label'); |
| 2181 | + }); |
| 2182 | + |
2118 | 2183 | it('multiple items should not disabled', () => {
|
2119 | 2184 | const { container } = testingRender(
|
2120 | 2185 | <Select
|
|
0 commit comments