Я хочу создать кодовую базу, которая бы работала и тестировалась на nodeJS и в браузере.
Я рассмотрел здесь среду nodeJS с помощью следующего кода и попытался использовать его для браузера. Недостает только то, как заставить те же файлы работать для браузера вместе с модульными тестами (без дублирования кода) и при этом заботитьсяс помощью babel и webpack.
- Запустить браузер + NodeJS
- Браузер модульных тестов + 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>