javascript - 'window er ikke definert' når du tester Paho MQTT Client med mocha og typescript
Jeg googlet i flere dager, men kan ikke finne noe om hvordan man tester Paho MQTT-klienten. Jeg prøvde det på en slags naiv måte, slik:
import { suite, test, slow, timeout, skip, only } from 'mocha-typescript';
import chai = require('chai');
var jsdom = require('jsdom');
var Paho: any;
const expect: any = chai.expect;
const host: string = '127.0.0.1';
const port: number = 1384;
const clientId1: string = 'testid1';
const clientId2: string = 'testid2';
let client1;
let client2;
describe('test', function () {
it('should', function (done) {
// emulate browser window, which is required by Paho
jsdom.env("<html><body></body></html>", [],
function (err: any, window: any) {
// when window is ready, require Paho and
// initialize with built window
Paho = require('ng2-mqtt/mqttws31').jsdom(window);
// This does not work -> exception in mqttws31.js: window is not defined
client1 = new Paho.MQTT.Client(host, port, clientId1);
client1.connect({ onSuccess: () => { expect(true).to.be.true; done(); }, onFailure: () => { expect(false).to.be.true; } })
done();
});
});
});
Men Paho=require(...)-delen inne i callback-funksjonen til jsdom.env(...) kaster unntaket i mqttws31.js: "window er ikke definert". Har noen en idé om hvordan man kan løse det, for å få Paho-klienten til å kjøre i et ikke-nettlesermiljø?
Takk på forhånd!
Svar #1
https://www.npmjs.com/package/mochify Du kunne bruke et lignende NPM-modul som dette. Som du kanskje forventer, har ikke Node.js-miljøet nettleserens globale objekter selv, så bruk et bibliotek som kan integrere disse globale objektene i testmiljøet ditt.
Jeg er ikke veldig kjent med Mocha, men her er ett bibliotek til jeg har lekt med i Karma som referanse https://www.npmjs.com/package/karma-browserify
Eller bare bruke en ekstern tjeneste som BrowserStack https://www.npmjs.com/package/browserstack