测试直接更改DOM的库

时间:2018-07-26 14:10:37

标签: javascript testing jestjs ui-testing jsdom

我写了一个小库,可以直接操作DOM,使用currentTargetQStringList text; text << "Iter FIRST" << "Iter SECOND"; for(qint32 i = 0; i < 2; i++) { Form2 * form2 = new Form2(); //creating form connect(this, &MainWindow::SendCurretText, form2, &Form2::ShowText);//connect to the second form`(textEdit) emit MainWindow::SendCurretText(text.at(i)); QPushButton *btnShowForm = new QPushButton(this); btnShowForm->setGeometry(i + 40, i + 100, 50, 50); connect(btnShowForm, &QPushButton::clicked, this, [=](){ form2->show(); } ); }//end for() 搜索和更改DOM。现在,我正在尝试找出如何对其进行测试。

到目前为止,我已经尝试使用jest + jsdom的组合:

window

我在这里做错什么了吗,还是我对测试方法完全错了?如果是这样,进行这种测试的正确方法是什么?

在这里,在所谓的e2e测试和单元测试之间,我有些失落,因为在我看来,这似乎介于两者之间。

理想情况下,我想结束对多个浏览器的测试,并获得某种测试范围。但这更像是下一步。现在,我根本无法正常工作。

我知道网络世界正在以多快的速度发展,所以,如果我完全错了,我希望您能指出我今天的正确做法。


更新

在@duxfox提出了一些建议之后,这是我的完整代码,因为使用这种方法,我的库现在缺少事件document,该事件应该触发其DOM处理。

const jsdom = require('jsdom');
const {JSDOM} = jsdom;

const dom = new JSDOM('<!DOCTYPE html><p>Hello world</p>');

// these two lines do not seem to do anything useful:
global.window = dom.window;
global.document = dom.window.document;

test('can globally access and search the DOM', () => {
    // this doesn't work
    expect(global.document.querySelectorAll('p').length).toBe(1);
});

1 个答案:

答案 0 :(得分:1)

下面是我与mocha/chai/jsdom/enzyme一起使用的jsdom设置脚本

看起来global.window应该设置为

dom.window.document.defaultView

而不是

dom.window

完整脚本,其中添加了其他全局属性:

var jsdom = require('jsdom');
const { JSDOM } = jsdom;

const { document } = (new JSDOM('')).window;
global.document = document;

global.window = document.defaultView;
window.console = global.console;

Object.keys(document.defaultView).forEach((property) => {
  if (typeof global[property] === 'undefined') {
    global[property] = document.defaultView[property];
  }
});

global.navigator = {
  userAgent: 'node.js'
};