getElement
関数を単体テストしようとすると
class BarFoo {
getElement() {
return document.querySelector('#barfoo');
}
}
mochaはdocument
について何も知らないので、次のようなことができると思いました。
beforeEach(() => {
global.document = {
querySelector: () => { ... }
}
}
これは機能しますが、これが正しいアプローチであるかどうか疑問に思っており、おそらくこの問題を解決するために利用可能なパッケージがあるのでしょうか?
利用可能なオプションがいくつかあります。
コードにDOMを追加することにより、node.js内のクライアント側コードの多くを単体テストできます
Mochaはクライアント内で実行されるため、個別のクライアント側の単体テストを使用できます。これは、特定のJS埋め込みではなく、特定のブラウザーに対してテストできるため、私の好みのアプローチになる傾向があります。
PhantomJSを使用すると、テスト環境内でヘッドレスブラウザーを制御できます。
Headless Chromeがリリースされたので、PhantomJSのメンテナーは退職しました。
私はちょうどあなたがウィンドウ上の特定の機能をモックする必要があるときにあなたが提案したものと同様のテストを書いてきました:
it('html test', function () {
const windowRef = global.window;
global.window = {document: {querySelector: () => null}};
const lib = require('lib-that-uses-queryselector');
assert(true);
global.window = windowRef;
});
より完全なウィンドウオブジェクトが必要な場合、他のテストで mock-browser を使用していました。
it('html test', function () {
const windowRef = global.window;
const MockBrowser = require('mock-browser').mocks.MockBrowser;
global.window = new MockBrowser().getWindow();
const lib = require('lib-that-uses-window');
assert(true);
global.window = windowRef;
});
おそらく、ウィンドウオブジェクト(global.window = windowRef;
上記) グローバルをいじる の後。