2017-02-13 18 views
0

Я хотел бы добавить TDD/BDD в мое приложение rails, но он использует MongoDB для хранения данных.Возможно TDD/BDD в приложениях с использованием MongoDB?

Итак, мой вопрос: существуют ли драгоценные камни, которые могут каким-то образом имитировать MongoDB или некоторые другие способы использования TDD/BDD в приложениях с тяжелыми рельсами MongoDB?

+1

Почему бы не использовать настоящую вещь? –

+0

Вы имеете в виду, что скрипт сборки создает один, запускает его, останавливает и удаляет при успешной сборке? –

+0

Нет, пусть это работает всегда. А затем создайте/удалите коллекции/документы по своему усмотрению. –

ответ

1

Когда вы пишите приемочные испытания, вполне можно использовать реальную базу данных. Приемочные тесты являются сквозными и должны проверять поведение всей вашей системы в конце концов.

Однако при написании простых модульных тестов для классов, которые изменяют некоторые данные и их необходимо сохранить, вы не хотите полагаться на конкретную базу данных. Большинство ваших модульных тестов даже не требуют каких-либо постоянных данных. Вам нужно будет сообщить какой-нибудь модуль «сохранить это», «обновить это», «удалить это», конечно, но нет необходимости постоянно сохранять данные. Так почему же проблема в создании базы данных? Вместо этого вы можете создать макет вашего картографа данных:

Data Mapper UML

DataMapperMock просто хранить все, что сохранить/обновить в памяти. Поэтому, когда вы хотите проверить, правильно ли создано ваше приложение или обновленные объекты, вы можете просто настроить свое приложение с помощью DataMapperMock вместо реальной вещи и спросить, получили ли они эти объекты. Поэтому, в конце концов, издевательская база данных довольно проста в использовании и на самом деле не нуждается в какой-либо специальной магии инфраструктуры. Это относится только к тестам, которые не требуют постоянных данных. Но даже для этого решение было бы не слишком сложным. Просто создайте еще один макет, который сохраняет/читает текстовые файлы вместо использования базы данных. Это, скорее всего, будет достаточно хорошим для ваших тестов, поскольку вы, как правило, не сохраняете много данных в модульном тесте.

1

Я использую модуль node.js https://github.com/mafintosh/mongojs, для заполнения моего монго, поэтому вы можете легко создавать и удалять свои даты манго.

var mongo = require('mongodb'); 
var assert = require('assert'); 
var Long = require('mongodb').Long; 
var MongoClient = mongo.MongoClient; 

var url = 'mongodb://127.0.0.1:27017/my_mongodb_path'; 
var ObjectId = mongo.ObjectID; 

var MongoInsert = function() { 
var myJsonData = [ 
    {'_id' : ObjectId('58334b5573835c48f22fb7a0'), 
    'mydate' : 'informations'} 
]; 

var insertDocuments = (db, data, tableName, callback) => { 
    var collection = db.collection(tableName); 

collection.insertMany(data, (err, result) => { 
    assert.equal(err, null); 
    assert.equal(1, result.result.n); 
    assert.equal(1, result.ops.length); 
    console.log(''+tableName+' inserted with success .'); 
    callback(result); 
    }); 
}; 

MongoClient.connect(url, (err, db) => { 
    assert.equal(null, err); 
    var myTable = 'table1'; 

    insertDocuments(db, myJsonData, table1,() => { 
    db.close(); 
    }); 
}); 
}; 
module.exports = MongoInsert; 

Я никогда не использовал в проекте рельсов, но я Финк вы можете легко пакеты нагрузки НПХ в рельсах, и поместить его в крюке.