Как заглушить MySQL запрос, используя некоторые фиктивные данные и мокко в узле JS - PullRequest
0 голосов
/ 12 июня 2018

Мое требование - использовать заглушки в скрипте модульного тестирования, чтобы обойти какой-то фактический запрос MySQL, используя фиктивные данные.Я использую фреймворк Mocha и Chai.Я не знаю, как использовать фиктивные данные, чтобы обойти запрос MySQL.

Я пытался с некоторой проверочной переменной, и если переменная истинна, я просто обошел запрос mysql с предопределенными фиктивными данными.Но это не совсем правильно.Поэтому, пожалуйста, объясните мне, как использовать заглушку sinon для преодоления mysql, используя ложные данные.

let query_response = await sequelize.query("select * from `" + table_name + "` where email='" + data.user + "' and name = '" + name + "' " + pre_name + ";", {
            type: sequelize.QueryTypes.SELECT
        });

В модульном тестировании мне нужно обойти этот запрос и дать ответ, используя некоторые ложные данные.Ответ должен быть таким,

[ { id: '3',
    xyz_id: 'Z1455264',
    vir_id: '264_3',
    name: 'XYZ',
    pre_name: 'abc',
    value: 1 },
  { id: '32',
    xyz_id: 'Z1455dd264',
    vir_id: '26s4_3',
    name: 'XYZQ',
    pre_name: 'abdc',
    value: 1 }];

1 Ответ

0 голосов
/ 12 июня 2018

Существует множество способов (внедрение зависимостей, замена модулей во время выполнения и т. Д.), А также множество библиотек, которые могут вам помочь.Это зависит от уровня вашей абстракции и от того, насколько вы этого хотите.Быстрый и грязный способ - использовать что-то вроде proxyquire и библиотеку-насмешку, такую ​​как testdouble .

с вашим sut.js (модулем/ system, которую вы будете тестировать), у вас будет:

const sequelize = require('sequelize')

// ...

exports.doSomething = async function () {
  await sequelize.query("select * from `" + table_name + "` where email='" + data.user + "' and name = '" + name + "' " + pre_name + ";", {
    type: sequelize.QueryTypes.SELECT
  })
}

И в своем тесте вы можете сделать следующее (независимо от среды тестирования):

const proxyquire = require('proxyquire')
const td = require('testdouble')
const sequelize = require('sequelize')

const query = td.function()
const sut = proxyquire('/path/to/your/sut.js', { 'sequelize': { query } })

const expected = [{
  id: '3',
  xyz_id: 'Z1455264',
  vir_id: '264_3',
  name: 'XYZ',
  pre_name: 'abc',
  value: 1
}, {
  id: '32',
  xyz_id: 'Z1455dd264',
  vir_id: '26s4_3',
  name: 'XYZQ',
  pre_name: 'abdc',
  value: 1
}];

td.when(query("select * from `<the_table_name>` where email='<the_email>'...", { type: sequelize.QueryTypes.SELECT })).thenResolve(expected);

// assert whatever you need from sut.doSomething()
...