Unterschiedliche Views in einer Single Page Application

Für ein kleineres Projekt habe ich vor einiger Zeit eine HTML5-Single-Page-Application entwickelt und stand dann vor dem Problem wie ich unterschiedliche Views innerhalb dieser Seite realisiere. Da ich möglichst ohne schwerfälliges Framework auskommen wollte, habe ich mich für eine Lösung mittels jQuery entschieden. Im HTML habe ich dazu mehrere Views definiert:

<div id="options" class="widget" style="display: none">
</div>

<div id="game" class="widget">
</div>

Der Inhalt des div-Elements mit der Id options ist dabei standardmäßig ausgeblendet. Nun kann die Ansicht der beiden Views mittels der Funktion switchView gewechselt werden:

switchView() {
	  
    if(this.activeView==this.Views.Game) {
        $("#game").css({"display": "none"});
        $("#options").css({"display": "block"});
        this.activeView = this.Views.Options;
    }
    else if (this.activeView==this.Views.Options) {
        $("#options").css({"display": "none"});
        $("#game").css({"display": "block"});
        this.activeView = this.Views.Game;
    }
}

In der Funktion wird das CSS der jeweiligen div-Elemente manipuliert. Dadurch wird die Sichtbarkeit der Blöcke gewechselt und man hat eine einfache View Umschaltung realisiert.

Globales @Before in JUnit

Wenn man unter JUnit für mehrere Tests einige vorbereitende Schritte benötigt, so kann man dafür die @Before Annotation nutzen:

@Before
public void setup() {
    // Prepare something
}

Das Problem an dieser Methode ist, das dass ganze auf eine Klasse beschränkt ist. Benötigt man die vorbereitenden Schritte in mehreren Klassen, so muss man sich unter JUnit 4 anders behelfen. Dort führt die Lösung über eine abstrakte Klasse:

public abstract class TestBase {
    @Before
    public void setup() {
        // Prepare something
    }
}

Von dieser Klasse können die Klassen mit den Testfällen abgeleitet werden. Allerdings muss man beachten, das es hierbei zu doppelter Initialisierung kommen kann. Unter JUnit 5 kann man dies nun wesentlich einfacher lösen. Dort gibt es die neue Annotation @BeforeAll:

@BeforeAll
public void setup() {
    // Prepare something
}

Mit diese Annotation wird die Initialisierung vor der Ausführung der Tests durchgeführt.

Größe des Flashspeichers beim NodeMCU ermitteln

Das auf dem ESP8266 basierendem Entwicklungsboard NodeMCU gibt es unterschiedlichen Varianten, die sich unter anderem durch die Größe des Flashspeichers unterscheiden. Möchte man nun ermitteln welche Größe der Speicher beim eigenen NodeMCU-Board hat kann man dies mit einem Programm aus einem der ESP8266-Repositories sehr unkompliziert ermittelt.

Die Größe des Flashspeichers wird über die serielle Schnittstelle ausgegeben

Nachdem die Arduino IDE mit dem Programm geöffnet wurde und das Programm auf das NodeMCU-Board geflasht wurde, kann die Ausgabe über die serielle Schnittstelle ausgelesen werden. Dazu muss der serielle Monitor, im Menü unter Werkzeuge -> Serieller Monitor zu finden, aktiviert werden. Wichtig ist es, dass hier die korrekte Baudrate eingestellt wird.

Tests bei Maven überspringen

Wenn man unter Maven mittels:

mvn package

mal schnell ein Paket bauen möchte ohne das dabei die komplette Testsuite eines Paketes ausgeführt wird, kann dies durch den Parameter:

-Dmaven.test.skip=true

erreichen. Alternativ kann der Parameter gekürzt werden:

-Dmaven.test.skip

Komplett würde das ganze dann so aussehen:

mvn package -Dmaven.test.skip

Enums unter JavaScript

Enums gibt es unter JavaScript nicht. Damit könnte der Artikel an dieser Stelle vorbei sein. Allerdings gibt es viele Wege um in JavaScript ein Verhalten oder die Strukturen zu simulieren, die am Ende gewünscht sind. Bei einem Enum würde dies so aussehen:

var DayOfTheWeek = {
  Monday: 1,
  Tuesday: 2,
  Wednesday: 3,
  Thursday: 4,
  Friday: 5,
  Saturday: 6,
  Sunday: 7
};

Genutzt wird das ganze dann so:

var dayOfTheWeek = DayOfTheWeek.Thursday;

Wer mehr über die Hintergründe rund um Enums unter JavaScript erfahren möchte dem sei der ausgezeichnete Blogbeitrag Enums in Javascript empfohlen.