JSDOM + Ava - 依赖于`document` global的测试功能

问题描述 投票:1回答:1

我正在编写一些与document对象相关的实用程序。

假设我正在编写一个使用document浏览器对象的文章。

// utils.js
export function myFn(callback) {
  document.addEventListener(callback);  
}

我的测试文件是这样的:

// utils.test.js
import test from "ava";
import { JSDOM } from "jsdom";
import sinon from "sinon";
import { myFn } from "./utils";

let dom, document;

test.beforeEach(() => {
  dom = new JSDOM();
  document = dom.window.document;
});

test("it calls the callback when document is ready", t => {
  let fakeCb = sinon.spy();
  myFn(fakeCb);
  t.true(fakeCb.called);
});

运行此测试后,我得到一个ReferenceError,告诉“文档未定义”,这是有道理的。

我的问题是:在测试函数中使用我的测试中的document变量的好方法是什么?

如果我将document参数传递给它,此函数有效,但这是一个丑陋的解决方案。

javascript unit-testing sinon jsdom ava
1个回答
1
投票

Node.js通过global提供对全局命名空间的访问。

document上设置global,它将在您的代码中提供:

// utils.test.js
import test from "ava";
import { JSDOM } from "jsdom";
import sinon from "sinon";
import { myFn } from "./utils";

test.beforeEach(() => {
  global.document = new JSDOM().window.document;
});

test("it calls the callback when document is ready", t => {
  // ...
});
© www.soinside.com 2019 - 2024. All rights reserved.