2017-01-18 9 views
3

Как написать модульные тесты для graphql. Я использую сервер apollo, graphql-tester и graphql.graphql-тестер (модульные тесты) с Graphql Apollo Server

Когда я запустить тест дает следующее сообщение об ошибке

 

    { 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) 

Ниже приведен тест на единицу.

 

    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

Такая же настройка, получение той же ошибки. Получили ли вы это? – jschr

+0

Я перешел к другой задаче, не успел снова проверить. Вы проверите свой ответ ниже. Спасибо за помощь.. –

ответ

-1

Вы уверены, что API GraphQL запущен? Как правило, хорошая практика - позволить тестовому набору обрабатывать тестовый сервер для вас, чтобы вы могли запускать тесты без внешних зависимостей. Я прохожу в завернутый экспресс-сервер вместе с относительным URL-адресом до graphql-tester.

Например,

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

Предполагая, что initApp() действительно возвращает экспресс-приложение, которое будет работать с API GraphQL в каталог/graphql конечной точки, я считаю, что это должно работать для вас.

Для справки, вот реализация createExpressWrapper. https://github.com/sazzer/graphql-tester/blob/master/src/main/servers/express.js

4

Вот как я получил это работает:

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

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

}) 

graphql сервер Apollo ожидает, что тип содержимого должен быть установлен в application/json с полезной нагрузкой { query: "...", variables: {}}.