Универсальный JS для браузера и nodeJS вместе с модульными тестами - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу создать кодовую базу, которая бы работала и тестировалась на nodeJS и в браузере.

Я рассмотрел здесь среду nodeJS с помощью следующего кода и попытался использовать его для браузера. Недостает только то, как заставить те же файлы работать для браузера вместе с модульными тестами (без дублирования кода) и при этом заботитьсяс помощью babel и webpack.

  1. Запустить браузер + NodeJS
  2. Браузер модульных тестов + nodeJS

src / Vehicle.js

class Vehicle {
    constructor() {
        this.wheels = 4;
    }

    getWheels() {
        return this.wheels;
    }
}

module.exports = Vehicle; 
// if (module != undefined) module.exports = Vehicle;
// if (window != undefined) window.Vehicle = Vehicle;

src / Truck.js

const Vehicle = require("./Vechicle");

class Truck extends Vehicle { 
    constructor() {
        super();
        wheels = 16;
    }
}

module.exports = Truck;

webpack.config.js Это не работает. (нужно минимизировать и не минимизировать)

module.exports = {
    module: {
        entry: "src/**",
        output: {
            filename: [
                "../dist/bundle.min.js" // with sources maps
                "../dist/bundle.js" // non minified
            ]
        }
        rules: [
            {
                test: /\.js$/,
                exclude: [/node_modules/, "test"],
                use: {
                    loader: "babel-loader"
                }
            }
        ]
    }
};

Тесты (nodeJS с мокко)

test / VehicleTest.js

describe("Vehicle Test", function () {
    const assert = require("assert");
    it("should test Vehicle wheels", function () {
        const Vehicle = require("../src/Vechicle");
        let v = new Vehicle();
        assert(v.getWheels() == 4);
    });
});

test / TruckTest.js

describe("Truck Test", function () {
    const assert = require("assert");
    it("should test Truck Wheels", function () {
        const Truck = require("../src/Truck");
        let t = new Truck();
        assert(t.getWheels() == 16);
    });
});

Тесты (браузер)

test / index.html Тест браузера

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/6.1.19/browser.js"></script>

    <script src="../dist/bundle.min.js"></script> <!-- all files from the src folder -->

    <script src="VehicleTest.js"></script>
    <script src="TruckTest.js"></script>
</head>
<body>

</body>
</html>
...