如何在此Jest测试中触发窗口加载事件?

时间:2019-10-24 13:04:46

标签: javascript jquery html ruby-on-rails jestjs

我正在尝试在Rails项目中设置我的第一个DOM操作/ JQuery Jest测试。在目前的基本形式下,我只是试图消除“导入的Java脚本功能什么都做不了”的基本障碍。

为此,我在PledgeFormUpdates.js.test中包含以下代码:

'use strict';

import pledge_form_updates from '../../app/javascript/components/PledgeFormUpdates.js';

test('Displays GDPR checkbox on EU country selection', () => {

  // Set up our document body
  document.body.innerHTML =
    '<select id="pledge_pledgor_home_country" class="country-select"></select>'// +

    pledge_form_updates();
    const $ = require('jquery');

    $(window).trigger('load');
    $("#pledge_pledgor_home_country").trigger('change');
});

在PledgeFormUpdates.js中,我有以下内容:

export default function() {
  console.log('hello world');
  window.addEventListener("load", function() {

    console.log('mellow curled');
    $("#pledge_pledgor_home_country").change(function() {
      console.log('yellow twirled')
    });
  });
};

因此,当我运行测试时,我期望看到打印输出,包括“ hello world”,“ mellow curled”和“ yellow twirled”。但是实际上,它是在第一个输出之后停止,因此推测窗口load事件实际上并未触发(我通过注释掉window.addEventListener...行,然后看到了所有三个打印输出来确认这一点)。 / p>

我在这里做错什么?或者更确切地说,应该如何触发加载事件? (我也尝试过$(window).load();,但这只会引发TypeError)

1 个答案:

答案 0 :(得分:0)

我发现了一个解决方法,尽管它似乎很笨拙。在测试的文件中,如果我替换行

window.addEventListener("load", function() {

$(window).on("load", function() {

然后运行测试(包括$(window).trigger('load');语句)将打印所有日志行。

我必须缺少一些东西,因为我不敢相信Jest会需要 JQuery来触发页面加载事件,但至少现在可以了。