私はPuppeteerを使ってReactアプリケーションでいくつかのテストを行っています。問題は、制御された入力は、単にDOM値を設定することによってそれらとやり取りするときに、その値を仮想DOMまたはアプリケーションの状態に保存しないということです。私はthis回答に基づいて、次の解決策を考え出した研究の数日後PuppeteerのjQueryでReact制御コンポーネントの値を設定するにはどうすればよいですか?
:
describe('<HomePage />', async() => {
eval('jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000;'); //eslint-disable-line
it('should make some new element visible', async() => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('http://localhost:3000/links');
await page.waitForSelector('input', { visible: true });
await page.addScriptTag({ url: 'https://code.jquery.com/jquery-3.2.1.min.js' });
const someNewElement = await page.evaluate(() => {
const $ = window.$;
function doEvent(obj, event) {
/* Created by [email protected] */
const newEvent = new Event(event, { target: obj, bubbles: true });
return obj ? obj.dispatchEvent(newEvent) : false;
}
const mySelect = $('[name="mySelect"]')[0];
mySelect.value = 'MakeSomeNewElementVisible';
// for input dispatch -> input, for select dispatch -> change
doEvent(mySelect, 'change');
return $('#someNewElement_was_made_visible').length;
});
expect(someNewElement).toEqual(1);
setTimeout(() => { browser.close(); }, 3000);
});
});
私の質問は:どのように私はいくつかのjQueryの機能をdoEvent
機能を置き換えるのですか?ここで