我正在尝试在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)
答案 0 :(得分:0)
我发现了一个解决方法,尽管它似乎很笨拙。在测试的文件中,如果我替换行
window.addEventListener("load", function() {
,
与
$(window).on("load", function() {
然后运行测试(包括$(window).trigger('load');
语句)将打印所有日志行。
我必须缺少一些东西,因为我不敢相信Jest会需要 JQuery来触发页面加载事件,但至少现在可以了。