入れ子のReactコンポーネントのSnapshotテストをレンダリングしようとしていますが、テストコードがdocument.getElementById()リクエストを処理できません。コンポーネントの関連するコードセクションはここにある:Reactの私の酵素スナップショットテストがdocument.getElementById()コールで失敗するのはなぜですか?
componentDidMount =() => {
let scrollbarWidth = appScrollbarWidth();
let headerWrapper = document.getElementById(this.headerWrapperId);
headerWrapper.style.right = scrollbarWidth +"px";
document.body.setAttribute("style", "padding-left:" + scrollbarWidth * 0.8 + "px;");
};
(酵素を使用して)ユニットテストコードはここにある:
describe("GridRows Snapshot",() => {
it("renders a Snapshot without error",() => {
const component = mount(
<GridRows wrapperId = {"dummyId"}
headerWrapperId = {"dummyheaderId"}
dataWrapperId = { "dummydataId"}
dataArray = {rowDefsArray}
columnClassNameAddOn = {"grid-layout-8cols"}
/>
);
expect(component.getElements()).toMatchSnapshot();
});
});
私がテストを実行すると、私はこのエラーを取得:
TypeError: Cannot read property 'style' of null
この行を参照する
:
headerWrapper.style.right = scrollbarWidth +"px";
回避策として、このような失敗したコードをバイパスして、 スナップショットを美容上の変更だけで続けることができ、実際の出力を変更しません。
componentDidMount =() => {
let scrollbarWidth = appScrollbarWidth();
let headerWrapper = document.getElementById(this.headerWrapperId);
if (headerWrapper) {
headerWrapper.style.right = scrollbarWidth +"px";
}
document.body.setAttribute("style", "padding-left:" + scrollbarWidth * 0.8 + "px;");
};
修正なしでこの作業を行うには何か不足していますか?
テスト(browser/js-dom)を実行している場所と使用しているテストランナー – wgcrouch
テストで要素を作成する必要があります。 [こちら](https://stackoverflow.com/questions/46057037/creating-dom-elements-for-javascript-testing)答え – EliaMelfior