В этом случае вам нужно перехватить создание модуля, который вы импортируете. Синон не может этого сделать. Один из способов достичь этого - через библиотеку proxyquire .
Это будет выглядеть примерно так:
const proxyquire = require('proxyquire');
const fakeGetScript = sinon.fake.returns({
foo: 'fakeValue'
});
const p = proxyquire('./path/to/p', {
scripts: {
getScripts: fakeGetScript
}
});
Затем вы можете запускать свои утверждения на fakeGetScript как вы ожидаете.
В react-select
вы можете контролировать открытие меню с помощью menuIsOpen
реквизита. для достижения вашей цели я бы использовал комбинацию menuIsOpen
, onInputChange
и onFocus
следующим образом:
class App extends Component {
constructor(props) {
super(props);
this.state = {
menuIsOpen: true
};
}
onInputChange = (options, { action }) => {
if (action === "menu-close") {
this.setState({ menuIsOpen: false });
}
};
onFocus = e => {
this.setState({ menuIsOpen: true });
};
render() {
return (
<div className="App">
<Select
options={options}
onFocus={this.onFocus}
onInputChange={this.onInputChange}
menuIsOpen={this.state.menuIsOpen}
/>
</div>
);
}
}
onInputChange
может получать следующие события:
"set-value",
"input-change",
"input-blur",
"menu-close"
[1111 ] В зависимости от того, какое поведение вы ожидаете, я обновлю этот живой пример .