2017-01-18 8 views
3

Wie schreibt man Komponententests für graphql. Ich benutze Apollo Server, Graphql-Tester und Graphql.graphql-tester (Komponententests) mit Graphql Apollo Server

Wenn ich den Test ausführen gibt es folgende Fehler

 

    { raw: '{"errors":[{"message":"Cannot read property \'definitions\' of undefined"}]}', 
     data: undefined, 
     errors: [ { message: 'Cannot read property \'definitions\' of undefined' } ], 
     headers: 
     { 'x-powered-by': 'Express', 
     'content-type': 'application/json', 
     date: 'Wed, 18 Jan 2017 05:56:22 GMT', 
     connection: 'close', 
     'transfer-encoding': 'chunked' }, 
     status: 400, 
     success: false } 
      1) Returns success 


     0 passing (35ms) 
     1 failing 

     1) Unittest1 Returns success: 
     TypeError: Cannot read property 'success' of undefined 
      at Assertion. (node_modules/chai/lib/chai/core/assertions.js:890:14) 
      at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/addMethod.js:41:25) 
      at Assertion.somethingMethod (node_modules/chai-things/lib/chai-things.js:97:25) 
      at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/overwriteMethod.js:49:33) 
      at Assertion.allMethod (node_modules/chai-things/lib/chai-things.js:165:25) 
      at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/overwriteMethod.js:49:33) 
      at node_modules/chai-as-promised/lib/chai-as-promised.js:305:22 
      at process._tickCallback (internal/process/next_tick.js:103:7) 

Es folgt das Gerät zu testen.

 

    const tester = require('graphql-tester').tester; 
    const fromGlobalId = require('graphql-relay').fromGlobalId; 

    const chai = require('chai'); 

    chai.should(); 
    chai.use(require('chai-things')); 
    chai.use(require('chai-properties')); 
    chai.use(require('chai-arrays')); 
    chai.use(require('chai-as-promised')); 

    describe('Sites',() => { 
     let sitesTest = tester({ 
     url: 'http://localhost:3000/graphql' 
     }); 

     describe('Unittest1',() => { 
     const response = sitesTest('{viewer {id}}').then((data) => { 
      console.log(data) 
     }); 

     it('Returns success',() => { 
      return response.should.eventually.have.property('success').equal(true); 
     }); 

     }); 

    }); 

+0

Gleiches Setup, der gleiche Fehler wird angezeigt. Hast du das funktioniert? – jschr

+0

Ich ging zu einer anderen Aufgabe, bekam keine Zeit, um noch einmal zu überprüfen. Überprüfen Sie Ihre unten erwähnte Antwort. Danke für die Hilfe.. –

Antwort

-1

Sind Sie sicher, dass die GraphQL-API ausgeführt wird? Es empfiehlt sich in der Regel, dass die Testsuite den Testserver für Sie in Gang setzt, damit Sie die Tests ohne externe Abhängigkeiten ausführen können. Ich gebe einen verpackten Express-Server zusammen mit einer relativen URL an graphql-tester weiter.

Zum Beispiel

const expressApp = initApp(); 
const client = tester({ 
    server: createExpressWrapper(expressApp), 
    url: '/graphql', 
}); 

Unter der Annahme, die initApp() in der Tat eine Express-Anwendung zurück, die eine GraphQL API am/graphql Endpunkt laufen wird, ich glaube, es sollte für Sie arbeiten.

Als Referenz hier die Implementierung von createExpressWrapper. https://github.com/sazzer/graphql-tester/blob/master/src/main/servers/express.js

4

Hier ist, wie ich habe es funktioniert:

const gql = tester({ 
    server: createExpressWrapper(server), 
    url: '/graphql', 
    authorization: `Bearer ${token}`, 
    contentType: 'application/json' 
}) 

gql(JSON.stringify({ query: '{ users { id } }' })).then((data) => { 

}) 

Apollos graphql Server erwartet, dass der Inhaltstyp mit einer Nutzlast von { query: "...", variables: {}}-application/json eingestellt werden.

Verwandte Themen