Как проверить представление с использованием методов класса (который создал HTML) с TypeScript, JSDOM, Mocha, Chai? - PullRequest
0 голосов
/ 08 ноября 2019

Я не могу получить «документ» JSDOM в классе View, когда я вызываю его. Что мне нужно сделать?

Я установил все @types/ зависимости, и JSDOM хорошо работает в ситуации, затем я вызываю его непосредственно из тестов, и не работал, когда я звонил View.ts

//view.ts

interface View {
  _element_id?: string,
  _elem?: any,
};

class View {
  constructor(param: View) {
    this._element_id = param._element_id;
    this._elem = document.getElementById(param._element_id);
}
a = document.getElementById(this._element_id).textContent
}

export { View };

Затем я создал тестовый файл, и он выглядит как

//test.ts

import { View } from 'view';
import { assert } from 'chai';
import { JSDOM, FromFileOptions, DOMWindow } from 'jsdom';

const dom = new JSDOM(`<!DOCTYPE html><html><body><div id="slider">Hello!</div></body></html>`);
let document = dom.window.document;

let view = new View({
    _element_id: "slider"} as View)

describe('Test View',
    () => {
it('Simple JSDOM', () => {
    let a = document.getElementById("slider").textContent;
    assert.equal(a, "Hello!")};

Первый тест в порядке! Но мне нужно запустить следующий тест, который сейчас не работает

it('Call JSDOM from class View', () => {
    let a = view.a;
    assert.equal(a, "Hello!")}
};

ошибка

this._elem = document.getElementById(param._element_id);
               ^
ReferenceError: document is not defined

1 Ответ

0 голосов
/ 08 ноября 2019

Итак, вот как я получил «документ» в классе View

//test.ts

import { View } from 'view';
import { expect, assert } from 'chai';
import * as mocha from 'mocha';

import { JSDOM, FromFileOptions, DOMWindow } from 'jsdom';

describe('Test View',
    () => {

        describe('Trial testing',
            () => {

                let view: any;

                beforeEach(function () {

                    return JSDOM.fromFile('./index.html').then((dom) => {

                            interface Global extends NodeJS.Global {
                                window: Window,
                                document: Document,
                            }

                            (global as Global).window = dom.window;
                            (global as Global).document = window.document;

                            view = new View({
                                _element_id: "slider",
                            } as View);
                        });

                });

                it('Get element with id', () => {

                    assert.equal(view.a, "Hello!")};

                });

            });

    });
...