Cat*_*ish 13 mocha.js mongodb node.js chai chai-as-promised
我正在尝试编写测试来测试连接到mongo的方法,但我实际上并不想让mongo运行并实际建立连接以使我的测试成功通过.
这是我当前的测试,当我的mongo守护程序运行时,它是成功的.
describe('with a valid mongo string parameter', function() {
it('should return a rejected promise', function(done) {
var con = mongoFactory.getConnection('mongodb://localhost:27017');
expect(con).to.be.fulfilled;
done();
});
});
Run Code Online (Sandbox Code Playgroud)
mongoFactory.getConnection代码:
getConnection: function getConnection(connectionString) {
// do stuff here
// Initialize connection once
MongoClient.connect(connectionString, function(err, database) {
if (err) {
def.reject(err);
}
def.resolve(database);
});
return def.promise;
}
Run Code Online (Sandbox Code Playgroud)
zam*_*uts 37
有一些与使用MongoDB作为数据存储的单元测试代码相关的SO答案:
我会尝试巩固这些解决方案.
首先,您应该在执行测试时希望MongoDB正在运行.MongoDB的查询语言很复杂,因此需要针对稳定的MongoDB实例运行合法查询,以确保您的查询按计划运行,并且您的应用程序正在对结果做出正确响应.但是,考虑到这一点,您永远不应该针对生产系统运行测试,而是针对集成环境运行外围系统.这可以与CI软件在同一台计算机上,或者只是相对接近它(就流程而言,不一定是网络或地理位置).
这个ENV可以是低占用空间并且完全在内存(资源1)(资源2)中运行,但不一定需要与生产ENV相同的性能特征.(如果您想进行性能测试,那么无论如何都应该在与CI不同的环境中处理.)
mongod专门为CI 安装服务.如果关注repl set和/或sharding(例如写入问题,不使用$isolated等),则可以通过运行多个mongod实例(1个配置,2个用于shard + repl的数据)和一个mongos实例来模拟集群环境.同一台机器有一些init.d脚本/调整或像docker这样的东西.NODE_ENV=int加载这些.在这些配置中,数据库连接字符串会有所不同 如果您没有使用特定于env的配置,请开始这样做以抽象应用程序运行时设置(即"本地","dev","int","pre","prod"等).我可以根据要求提供样品.mongodb-fixtures和node-database-cleaner.Fixtures为测试提供了一个工作且一致的数据集:将它们视为引导程序.node-database-cleaner.mongodb-fixtures.如果您仍然认为没有运行MongoDB是正确的方法(并且您不会是唯一的方法),那么使用ORM从驱动程序中抽象数据存储调用是最好的选择(对于整个应用程序,而不仅仅是测试) .例如,虽然我从未使用它,但model声称与数据库无关.使用这种方法,您仍然需要fixtures和env配置,但是您不需要安装MongoDB.这里需要注意的是,您将受到您选择的ORM的支配.
| 归档时间: |
|
| 查看次数: |
20211 次 |
| 最近记录: |