【发布时间】:2017-11-06 12:18:41
【问题描述】:
我正在使用Puppeteer 对 React 应用程序进行一些测试。问题是受控输入在与它们交互时不会将它们的值保存到虚拟 DOM 或应用程序的状态中,只需设置 DOM 值即可。
经过几天的研究,我根据this的回复想出了以下解决方案:
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 David@Refoua.me */
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 函数?
【问题讨论】:
标签: jquery reactjs console puppeteer