最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Test DOMParser using Jest - Stack Overflow

programmeradmin1浏览0评论

I have a method which uses DOMParser to parse a XML, like this:

this.parseXmlString = function(xmlDocStr) {
    var xmlDoc;
    var parser= new window.DOMParser();

    xmlDoc = parser.parseFromString( xmlDocStr, "text/xml" );
    // here I do some stuff with xmlDoc

    return xmlDoc;
};

The problem is: when I try to make a unit test with Jest of this function window.DOMParser is undefined. The test is as simple as:

expect(x2js.parseXmlString(xmlDocStr)).toMatchObject(expectedObject);

Is there any way I can use DOMParser from a Jest unit test?

I have a method which uses DOMParser to parse a XML, like this:

this.parseXmlString = function(xmlDocStr) {
    var xmlDoc;
    var parser= new window.DOMParser();

    xmlDoc = parser.parseFromString( xmlDocStr, "text/xml" );
    // here I do some stuff with xmlDoc

    return xmlDoc;
};

The problem is: when I try to make a unit test with Jest of this function window.DOMParser is undefined. The test is as simple as:

expect(x2js.parseXmlString(xmlDocStr)).toMatchObject(expectedObject);

Is there any way I can use DOMParser from a Jest unit test?

Share Improve this question asked Oct 9, 2018 at 11:43 Daniel MarínDaniel Marín 1,44716 silver badges39 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 9

You don't need to window reference. Just use new DOMParser().... Make sure you have "testEnvironment": "jsdom" in your Jest configuration (it should be the default though).

I've created an example here. https://repl.it/@ChrisPaton/FlusteredNearDecimal

You will also most likely need the latest version of Jest, as jsdom only added support for DOMParser and XMLSerializer in late October.

Update

JSDom is not supported above v11 by Jest. You'll need to configure a custom environment for this. Here is a link to their documentation and here is a link to a custom jsdom environment that is easy to use. I hope this helps.

On recent jest version (>28) you just have to install jest-environment-jsdom and change your test environment.

In package.json

"jest-environment-jsdom": "^29.7.0",

Then the environment either in the jest config file

testEnvironment: 'jsdom',

or by adding a @jest-environment docblock at the top of the file for all tests in that file:


/**
 * @jest-environment jsdom
 */

https://jestjs.io/docs/configuration#testenvironment-string

发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>