Es ist stets ratsam, Codes bereits während der Programmierung zu überprüfen. Behalten Sie Dinge im Auge, die nicht funktionieren, und finden Sie Fehler, während Sie neue Codes hinzufügen. Dies wird immer wichtiger, je stärker ihr Team wächst und je komplizierter Ihre Projekte in Nuxeo Studio werden. Dank dem Branch Management und Nuxeo CLI von Nuxeo Studio können Sie jetzt fantasievoller programmieren, Ihr Team bequem skalieren, Bugs während der Entwicklung finden und Ihr Studio-Projekt validieren.

Verbinden Sie Nuxeo CLI mit Ihrem Nuxeo Online Services (NOS) Konto.

Seit Nuxeo CLI 1.5 können Sie Ihr Projekt mit Ihrem NOS-Konto verbinden und über CLI bearbeiten. Wir haben mit diesem Support gerade erst begonnen und werden in den nächsten Wochen viele weitere Neuheiten vorstellen. Aber dieses CLI ist bereits äußerst nützlich, weshalb Sie unbedingt weiterlesen sollten.

Zunächst wollen wir die beiden verbinden. Gehen Sie mithilfe Ihres bevorzugten Terminal-Emulators in den Stammordner Ihres Projekts (oder erstellen Sie einen neuen) und führen Sie Nuxeo Studio aus:

$ nuxeo studio

Geben Sie Ihre NOS-Anmeldeinformationen und den symbolischen Namen Ihres Projekts an. (Keine Angst, diese werden nicht gespeichert. Im weiteren Verlauf verwenden wir Tokens.)

Führen Sie ‚nuxeo studio’ wie folgt aus:

$ nuxeo studio
    info You are going to link a Studio project to this project.q
? NOS Username: akervern
? NOS Password: ********
? Studio Project: akervern-SANDBOX

Nach Eingabe Ihrer Anmeldeinformationen und dem Studio Projekt wird Ihre Maven Abhängigkeiten-Struktur aktualisiert. Wie Sie die letzte Frage beantworten, hängt von Ihrer Datei mit den globalen Maven-Einstellungen ab. Das Repository von Maven in Studio ist geschützt und Sie benötigen eine Berechtigung, um Ihre Artefakte herunterzuladen und Zugriff aufs Internet zu erhalten. Nuxeo CLI wird Ihre NOS-Anmeldeinformationen dem ‚nuxeo studio’-Server hinzufügen, falls sie noch nicht hinterlegt sind. Und ich muss darauf bestehen: LESEN UND FOLGEN Sie dem Leitfaden zur Kennwortverschlüsselung von Maven, bevor Sie weiterarbeiten. Ein Kennwort in Klartext ist SCHLECHT!

Sollten Sie Zweifel haben, wenn Sie gefragt werden, ob Sie Ihre ‚settings.xml’-Date überschreiben möchten, überprüfen Sie folgendes:

conflict ../../../../.m2/settings.xml
? Overwrite ../../../../.m2/settings.xml? (Ynaxdh)
  y) overwrite
  n) do not overwrite
  a) overwrite this and all others
  x) abort
  d) show the differences between the old and the new
  h) Help, list all options
  Answer:

Ich empfehle, zunächst die Unterschiede (‚d’) anzuzeigen, um sicherzustellen, dass die geänderten Zeilen korrekt sind. Ist alles korrekt, dann können Sie diese mit den Änderungen (‚y’) überschreiben.

Erstellen eines einfachen Skriptvorgangs

Als nächstes wollen wir ein einfaches Automatisierungsskript in unserem Studio-Projekt erstellen. Öffnen Sie Nuxeo Studio und erstellen Sie einen automatischen Skriptvorgang mit dem Namen ‚smartest_thing’ mit ‚void’ als Ein- und Ausgabe.

Der Inhalt ist trivial:

function run(input, params) {
  return 5;
}

Vergessen Sie nicht, diesen Prozess zu speichern. Der nächste Schritt wird eindeutig interessanter.

Unittests in Studio

Wir gehen davon aus, dass Sie Grundkenntnisse über Tests in Nuxeo besitzen und sich bereits in unser Junit-basiertes Unittest Framework eingelesen haben. Wenn Sie darüber hinaus bereits meine Dokumentation Testen eines Studio Bundles gelesen haben, können Sie direkt loslegen. Es freut mich sehr, dass Sie die Dokumentation gelesen haben.

Wir verwenden unsere neue Anmerkung ‚PartialDeploy’ (verfügbar seit ‚9.1’ oder ‚8.10-HF04’), mit der Sie genau auswählen können, welche Beiträge Sie während Ihres Tests unabhängig von den Anforderungen bereitstellen möchten. Dafür stehen einige vorher ausgefüllte Kategorien bereit, die Ihnen bei der Bereitstellung der meisten in Studio konfigurierbaren Elemente helfen:

  • org.nuxeo.runtime.test.runner.TargetExtensions.ContentModel: Stellt Schemen, Dokumenttypen, Lebenszyklen, Verzeichnisse und Versionierungsrichtlinien bereit. - org.nuxeo.runtime.test.runner.TargetExtensions.ContentTemplate: Stellt alles bereit, was mit ‚ContentModel’ und Content-Vorlagen zusammenhängt. - org.nuxeo.runtime.test.runner.TargetExtensions.Automation: Stellt alles bereit, was mit ‚ContentModel’, Automatisierungsketten und der automatischen Skripterstellung zusammenhängt.

Testen eines automatischen Skriptvorgangs

Zuerst wollen wir einen leeren Test laden:

$ nuxeo bootstrap test-empty
     info Installation of single-module is skipped.
     info You'll be prompted for generation of:
     info   blog-project-core: test-empty
    create Generate Module: blog-project-core
    create Generating Test empty
     info   Parameters: Unit test package, Unit test class name, Using feature
? Unit-Test package: org.nuxeo.sample
? Unit-Test class name: MySmartestOperation
? Using Feature: AutomationFeature
     info Maven dependency: org.nuxeo.runtime:nuxeo-runtime-test:::test
     info Maven dependency: org.nuxeo.ecm.platform:nuxeo-platform-test:::test
     info Maven dependency: org.nuxeo.ecm.platform:nuxeo-platform-audit-core::test-jar:test
     info Maven dependency: org.nuxeo.ecm.automation:nuxeo-automation-test:::test
    force pom.xml
   create src/test/java/org/nuxeo/sample/MySmartestOperation.java
     info You can start editing code or you can continue with calling another generator (nuxeo bootstrap [<generator>..])

Öffnen Sie die Unittestkategorie ‚MySmartestOperation’ mithilfe Ihres bevorzugten IDE. Jetzt passen wir den Test an, um sicherzustellen, dass unser Vorgang auch tatsächlich ‚5’ ausgibt.

Bitte achten Sie beim Testen von etwas ‚wirklichkeitsnäherem’ darauf, die Bereitstellung des eigentlichen Projektbundles nicht zu vergessen.

package org.nuxeo.sample;
 import static org.junit.Assert.assertEquals;
 import javax.inject.Inject;
 import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.automation.AutomationService;
import org.nuxeo.ecm.automation.OperationContext;
import org.nuxeo.ecm.automation.OperationException;
import org.nuxeo.ecm.automation.test.AutomationFeature;
import org.nuxeo.ecm.core.test.DefaultRepositoryInit;
import org.nuxeo.ecm.core.test.annotations.Granularity;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
import org.nuxeo.runtime.test.runner.PartialDeploy;
import org.nuxeo.runtime.test.runner.TargetExtensions;
 /**
 * Empty Unit Testing class.
 * <p/>
 *
 * @see <a href="https://doc.nuxeo.com/corg/unit-testing/">Unit Testing</a>
 */
@RunWith(FeaturesRunner.class)
@Features(AutomationFeature.class)
@RepositoryConfig(init = DefaultRepositoryInit.class, cleanup = Granularity.METHOD)
// !! Notice your Project symbolic name is prefixed with "studio.extension."
@PartialDeploy(bundle = "studio.extensions.akervern-SANDBOX", extensions = TargetExtensions.Automation.class)
public class MySmartestOperation {
     @Inject
    protected AutomationService automationService;
     @Test
    public void assertWeAreSmart() throws OperationException {
        // !! Notice the Scripting name is prefixed with "javascript."
        Object res = automationService.run(new OperationContext(), "javascript.smartest_thing");
        assertEquals(5, res);
    }
}

Und voilà! Sie haben gerade Ihren ersten Unittest geschrieben, der das Verhalten Ihres automatischen Skriptvorgangs überprüft. Willkommen bei TDD!

Zusätzlicher Vorteil

Wenn Sie Teil eines Teams sind, das Wert auf eine saubere Bereitstellung legt, und gerne Dinge selbst in die Hand nehmen, oder einfach nur beste Vorgehensweisen befolgen, dann haben Sie wahrscheinlich bereits ein Nuxeo Package in den Modulen Ihres Projekts integriert. Wenn nicht, beginnen Sie damit, das ‚nuxeo bootstrap package‚’ auszuführen, und sämtliche Kollegen in Ihrem Team werden Sie lieben. Dann können Sie Ihr Projekt erstellen und die Paketdatei öffnen, die sich in ‚{ihr-projekt}-package/target/{your-project}-1.0.zip’ befindet. Werfen Sie einen Blick darauf. Sie werden feststellen, dass jetzt die JAR-Datei Ihres Studio-Projekts enthalten ist. Sie können nun Ihre benutzerdefinierten JAVA-Bundle und das Studio-Projekt gemeinsam installieren. Weniger Aufwand bei der Bereitstellung gibt Ihnen mehr Zeit für die schönen Dinge im Leben.