Как смоделировать mongodb для модульного тестирования - PullRequest
0 голосов
/ 18 сентября 2018

Я изучаю graphql и хочу провести модульное тестирование моего резольвера (то есть запроса, чтобы получить «ответы»). Проблема в том, что мой резолвер использует mongoose для запроса данных из mongodb за сценой, и я не знаю, как имитироватьэти звонки.

Может ли кто-нибудь помочь мне с этим?Спасибо.

Решатель для моего запроса выглядит так:

const { Book, Author } = require('../models')    

module.exports = {
  answers: async ( parent, { searchText } ) => {        
    let authors = null;
    let books = null;
    try {
        authors = await Author.find({});            
        books = await Book.find({}); 
        return getAnswers(authors,books, searchText);
    }catch (err) {
        console.log(err);
    }        
    return null;
 }
}

function getAnswers(books,authors,text) {
    <!-- process data here -->
}

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать graphql-tools вот ссылка на блог

npm install graphql-tools

импортировать вашу схему в ваш тестовый файл

import { mockServer } from 'graphql-tools';
import schema from './schema.js';

describe('mock server', () => {
  it('should mock the server call', async () => {
    const myMockServer = mockServer(schema, {
      String: () => 'Hello', // <--- expecting a `hello` to be returned
    });
    const response = await myMockServer.query(`{
      users {
        username,
      }
    }`);

    const expected =  { // This shape of the data returned
      data: {
        users: [
          {
            "username": "Hello"
          },
          {
            "username": "Hello"
          },
       ]
    }
  }
  expect(response).toMatchObject(expected);
});
});
0 голосов
/ 18 сентября 2018

Вы ищете proxyquire .Это позволяет вам переопределить зависимости в файле, который вам требуется.Ваш тестовый файл может выглядеть примерно так:

const proxyquire = require('proxyquire');
const mockBook = {...}

describe('Test #1', function() {
    const stubs = {
        '../models': {
            Book: {
                find: () => Promise.resolve(mockBook),
            },
            Author: // Same as book
        },
    };

    const myfile = proxyquire('./myfile', stubs);
    let answers;

    before(async function() {
        answers = await myfile.answers();
    });

    describe("should succeed", function() {
        expect(answers).to.be.equal(ExpectedAnswers);
    });
});

Теперь этот код не был запущен и определенно не будет успешным.Это должно было дать вам представление о том, как использовать proxyquire.

Что касается части кода getAnswers(), вам также нужно будет смоделировать зависимости этой функции, как это делается для * 1009.* в примере выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...