Pakt beendet mit code 1

Ich versuche, führen Sie einige tests mit Pact Bibliothek und ich bekomme einige Fehler. Hier ist die test-Konfiguration:

const path = require('path');
const Pact = require('pact');
const expect = require('expect.js');
const config = require('../../../src/server/config');
const service = require('../../../src/routes/interactions/interactions.service');

describe('@component/interactions tests', () => {
    const url = 'http://localhost';
    const port = 8989;

    const provider = Pact({
        port: port,
        log: path.resolve(process.cwd(), 'test/component/interactions/log/interactions-pact.log'),
        dir: path.resolve(process.cwd(), 'test/component/interactions/pacts'),
        spec: 2,
        consumer: 'cx_issue',
        provider: 'interaction',
        //logLevel: 'WARN'
    });

    config.settingsToExport.INTERACTION_URL = `${url}:${port}`;

    before(done => {
        provider.setup()
            .then(() => {
                done();
            })
            .catch(err => {
                done(err);
            });
    });

    after(done => {
        provider.finalize()
            .then(() => {
                done();
            })
            .catch(err => {
                done(err);
            });
    });

    describe('#createInteraction', () => {
        before(done => {
            const INTERACTION_BODY = {
                contact: 'contact1'
            };
            const TERM = {
                generate: '0dae5b93-9451-4b08-b7bb-f0b944fbcdf2',
                matcher: '^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'
            };

            const pactInteractionCreate = {
                state: 'Creates a new interaction',
                uponReceiving: 'a new interaction is created successfully',
                withRequest: {
                    method: 'POST',
                    path: '/interactions',
                    body: INTERACTION_BODY
                },
                willRespondWith: {
                    status: 201,
                    body: {
                        id: Pact.Matchers.term(TERM)
                    }
                }
            };

            const promises = [
                provider.addInteraction(pactInteractionCreate)
            ];
            Promise.all(promises)
                .then(() => {
                    done();
                });
        });

        it('/api/interactions POST', done => {

            const interaction = {
                contact: 'The xx'
            };

            service.createInteraction(interaction)
                .then(response => {
                    expect(response.id).to.be.equal(TERM.generate);
                    done();
                })
                .catch(done);
        });
    });
});

Dies ist mein package.json Inhalt der Datei, mit allen Abhängigkeiten habe ich installiert:

{
  "name": "issueAPI",
  "version": "1.0.0",
  "private": true,
  "main": "./src/index.js",
  "scripts": {
    "dev": "nodemon -e  js ./src/index.js",
    "start": "node ./src/index.js",
    "linter": "node ./node_modules/eslint/bin/eslint.js ./src",
    "test": "mocha test",
    "test-component": "mocha test/component",
    "install-test-build": "npm install && npm test && npm run linter",
    "test-build": "npm test && npm run linter"
  },
  "jshintConfig": {
    "esversion": 6
  },
  "dependencies": {
    "ajv": "^4.11.3",
    "body-parser": "^1.17.2",
    "express": "^4.15.3",
    "express-winston": "^2.4.0",
    "request": "^2.81.0",
    "winston": "^2.3.1",
    "yamljs": "^0.2.9"
  },
  "devDependencies": {
    "@pact-foundation/pact-node": "^4.8.3",
    "dotenv": "^4.0.0",
    "eslint": "^4.2.0",
    "eslint-config-node": "^1.6.0",
    "expect.js": "^0.3.1",
    "mocha": "^3.2.0",
    "nodemon": "^1.11.0",
    "pact": "^2.3.3",
    "sinon": "^2.3.8",
    "supertest": "^3.0.0"
  }
}

– Und das ist die Fehlermeldung die ich bekomme:
Pakt beendet mit code 1

Grundsätzlich, gerade jetzt, stört mich nicht, wenn die tests gut sind oder nicht. Das Hauptproblem jetzt ist, dass der Pakt mock-server nicht gestartet wird.

Das seltsame hier ist, dass ich anderen Projekt, wo der Pakt tests, die ordnungsgemäß ausgeführt. Ich habe bewegt der service, den ich testen will, aus dem Projekt, in dem nicht die eine, die ausführt, dass diese tests gut, und es funktioniert (zumindest der Pakt mock-server gestartet wird). Die Abhängigkeiten in diesem anderen Projekt sind fast die gleichen wie die problemathic Projekt:

"dependencies": {
    "ajv": "^4.11.3",
    "body-parser": "^1.16.1",
    "dotenv": "^4.0.0",
    "express": "^4.14.0",
    "jsonwebtoken": "^7.4.1",
    "jwt-simple": "^0.5.1",
    "morgan": "^1.8.1",
    "mustache-express": "^1.2.4",
    "node-env-file": "^0.1.8",
    "request": "^2.79.0",
    "when": "^3.7.8"
  },
  "devDependencies": {
    "@pact-foundation/pact-node": "^4.8.3",
    "eslint": "^3.17.1",
    "eslint-config-node": "^1.6.0",
    "expect.js": "^0.3.1",
    "mocha": "^3.2.0",
    "nodemon": "^1.11.0",
    "pact": "^2.3.3",
    "sinon": "^1.17.7",
    "supertest": "^3.0.0",
    "nock": "^9.0.13"
  }

Was ist Los mit dieser situation um?

EDIT: habe ich gestartet, die pact tests mit DEBUG – flag und das ist das log generiert:
Pakt beendet mit code 1
Pakt beendet mit code 1

InformationsquelleAutor christiansr85 | 2017-07-14



3 Replies
  1. 2

    Wie es aussieht ist der server nicht korrekt startet, nach den exit-code 1. Dies könnte ein port-Konflikt auf port 8989, so dass lohnt.

    Es könnte im Zusammenhang mit https://github.com/pact-foundation/pact-js/issues/64 (Windows-Datei-Pfade in Ihrer Länge beschränkt).

    Könnten Sie bitte aktivieren DEBUG Protokollierung mit logLevel: 'DEBUG' und Hinweis, was es gibt, und auch teilen *.log – Datei. Es könnte ein argument ist nicht korrekt formatiert, wenn der server gestartet wird.

    Als Sie merken, es ist nicht in der Lage zu starten der zugrunde liegenden Ruby-Prozess, so dass wir brauchen, um an der Unterseite des.

    • Ich habe starteten die tests mit DEBUG-logs und ich habe angezeigt, die Ausgänge in Frage. Keine log-Datei generiert wird, so dass alle Informationen, die ich habe. Ich denke, es ist nicht ein port-Konflikt weil ich, wenn ich führen Sie die pact-test im anderen Projekt funktioniert es einwandfrei, aber in diesem einen ist es immer zu mir, dass Fehler, auch wenn ich die port-Nummer ändern.
    • Ja! Es war ein Pfad der Länge-Problem…aber ich war verwirrt, weil ich nicht sehen einen Pfad in der Konsole größer als 260 Zeichen. Trotzdem, ich habe das Projekt in einem kürzeren Pfad und der server gestartet wird.
    • interessant. Könnten Sie bitte Ihre eigene Frage zu beantworten dann? Es könnte nützlich sein für andere.
    • Dies ist aus der Ruby-Seite oder die node-Seite?
  2. 1

    Endlich, nach @Matthew Fellows zu beantworten, und nach der Lektüre seine link zu https://github.com/pact-foundation/pact-js/issues/64, zog ich mein Projekt zu einem kürzeren Pfad, simimlar zu D:\myproject\, und dann die pact mock-server gestartet wurde und mein Test war bestanden. So, bis eine bessere Lösung entdeckt wird, werde ich der Arbeit unter das kurze Verzeichnis-Pfad, um zu vermeiden, mehr Probleme.

    Bitte, Lesen Sie den vorherigen link, um weitere Informationen über diesen Fehler, weil es ist sehr gut erklärt.

  3. 0

    Scheint mir, dass der server nicht ordnungsgemäß startet, das ist normal, da der port bereits verwendet wird. Um zu sehen, ob dies der Fall ist, in Ihren Knoten Befehlszeile (cmd, Typ node zu gehen, um den Knoten Befehlszeile), kopieren/einfügen der folgenden:

    require('http').createServer(function(){}).listen(11108);

    Die ‚hören‘ – Funktion nimmt in der port-Nummer, die ich nahm aus deinem screenshot. Schauen Sie, was Knoten outputs; meine Vermutung ist, es wird sich zeigen, so etwas wie dieses:

    Error: listen EADDRINUSE :::11108
        at Object.exports._errnoException (util.js:1018:11)
        at exports._exceptionWithHostPort (util.js:1041:20)
        at Server._listen2 (net.js:1258:14)
        at listen (net.js:1294:10)
        at Server.listen (net.js:1390:5)
        at repl:1:44
        at sigintHandlersWrap (vm.js:22:35)
        at sigintHandlersWrap (vm.js:73:12)
        at ContextifyScript.Script.runInThisContext (vm.js:21:12)
        at REPLServer.defaultEval (repl.js:340:29)

    Dies bedeutet, dass es ist in der Tat ein port-Konflikt. Schauen Sie auf Ihre task-manager und stellen Sie sicher, es gibt keine Instanzen von Knoten, die im hintergrund laufen, die möglicherweise stören Ihre tests dreht einen neuen server. Sie können auch prüfen wollen, die für alle Versionen des ruby.exe läuft; leider müssen wir das Paket ruby.exe mit Pakt-Knoten, und es startet eine neue Instanz des mock-server mit ruby, da das die Sprache ist es geschrieben. Von Zeit zu Zeit, es kann passieren, dass Knoten einfach „verliert“ der ruby-Instanz und nicht schalten Sie es ordnungsgemäß.

    Dies ist ein problem, das ist uns wohl bekannt, und ist etwas, das wir aktiv versuchen, zu beheben durch die Konsolidierung aller Kern-Pakt-code in einer einzigen gemeinsamen Bibliothek, die verwendet werden können für alle Sprachen und Betriebssysteme ohne die Notwendigkeit der spin-up eine zusätzliche Instanz. Bitte Geduld mit uns, wie wir einige dieser Knicke aus 🙂

    • Wenn es ein port-Konflikt, wäre nicht der Konflikt auf port 8989? 11108 sieht die PID.
    • Ah, ja, falsch verstanden, die port-Nummer.
    • als Matthew angegeben, wird der port 8989 und 11108 ist eine interne PID generiert Pakt, ist in jeder Ausführung der tests. Trotzdem versuchte ich auch, die port-Nummer ändern und ich habe immer noch das gleiche Problem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.