Tag: 摩卡

testing与Mockgoose失败导致MongoError:拓扑被破坏

我正在用Mockgoose / Mongoose(使用Mocha / Chai作为testing套件)进行一系列的testing。 如果我的某个testing发生故障(例如,由于.should.be.deep.equal()失败),所有后续testing都会失败,并显示消息MongoError: topology was destroyed 这里有一些相关的片段: mockgoose(mongoose); before(function(done) { mongoose.connect('mongodb://fake.test/TestingDB', function(err) { done(err); }); }); afterEach(function(done) { mockgoose.reset(); done(); }); // Test Cases describe('Testing the functions that deal with users and locations:', function() { // Test Setup var req beforeEach(function(done) { req = {}; mockgoose.reset(); done(); }); beforeEach(function(done) { sensors.create(testData.deviceData, function(err, […]

为什么使用supertest代替expressJS的unit testing?

在search如何testing我的node.js软件时,我遇到了许多build议使用Supertest的答案。 在使用Supertest之前,我正在testing我的应用程序: app.get('/', base_road); function base_road(req, res) { return res.json("Hello world"); } it("base road", function() { base_road(mocked_req, {json: function(data) { assert.isEqual(data, "Hello world"); }}); }); 我对这种testing方式并不满意,因为嘲笑可能会变得很难阅读,但是我觉得如果使用超types,我会比unit testing更接近e2e。 我应该使用supertest做unit testing吗? 我的实际testing方式是否正确?

嘲笑的对象看起来像mongoose的对象

我刚刚开始瓦/摩卡,sinon和mongoose。 我在mongoose有一个模式/模型: var PersonSchema = new Schema({ name: { type: String, required: true }, employer: { type: Schema.Types.ObjectId, ref: 'Employer' } }); mongoose.model('Person', PersonSchema); var EmployerSchema = new Schema({ name: { type: String, required: true } }); mongoose.model('Employer', EmployerSchema); 我有一个方法来帮助查询: var getPersonById = function(id, callback) { Person.findById(id, function(err, person) { if (err) return callback(err); // […]

我如何获得它之外的节点/摩卡错误的堆栈跟踪

当我通过Node.js运行我的Mochatesting套件并且代码获取错误时,Node输出该错误的堆栈跟踪…除非它是通过对未定义的variables进行调用而导致的TypeError,在这种情况下,我没有堆栈跟踪或testing失败,只需一行输出即可。 例如,如果我有以下代码: foo.bar(); // foo is undefined 我只是得到: [TypeError: Cannot read property 'bar' of undefined] 当我运行摩卡。 有什么办法让节点/摩卡输出这种错误的完整堆栈跟踪? 没有这个难以find问题的抱怨。 编辑:其实,它似乎也有问题发生在哪里的错误。 如果它发生在一个describe里面,我不会得到一个堆栈跟踪,但是如果它发生在it内部it我会这样做。 在describe s(或其他没有堆栈跟踪的地方)中是否有任何方法来显示堆栈跟踪的错误?

在节点> = 4.x中,伊斯坦布尔的性能很差

在节点4.x (和5.x)中运行伊斯坦布尔检测的JavaScript代码比在节点0.12.x上慢4倍。 具体来说,我有一个摩卡testing,需要约500毫秒完成非仪表代码。 相同的testing在节点0.12.x的检测代码上花费约5000毫秒。 同样的testing在节点5.x的检测代码上花费约20000毫秒。 在更高级的节点中性能如此糟糕的任何原因? 注意:为了隔离问题,我运行了istanbul instrument命令。 仪器需要1秒钟。 然后,我对仪表代码进行了Mochatesting, 没有生成伊斯坦布尔报告或检查报道 。

将上下文传递给“require”d javascript模块

我只是玩了一些testing,我一直在这个例子来编写一个模块: http : //www.richardrodger.com/2013/09/27/how-to-make-simple-node- JS-模块,工作在该浏览器/#。Vt74CvmLT0M 我正在使用一个更改,我看到某处检查“窗口”,并使用它,否则使用“这个”。 我简化了一个例子: (function() { 'use strict'; var root = this; var previous_myModule = root.myModule; var myModule = function() { }; myModule.noConflict = function() { root.myModule = previous_myModule; return myModule; }; if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { exports = module.exports = myModule; } […]

在Jenkins中使用blanket.js覆盖率报告

我有一个运行摩卡testing的node.js项目,并使用毯子生成覆盖报告。 我已经设法生成了覆盖率报告,但是我不确定如何生成可以在Jenkins中使用和查看的报告。 有什么build议么? 我正在寻找类似于Cobertura插件的结果( https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin )。

Mockgoose不拦截数据库调用

我使用mockgoose在一些控制器unit testing中模拟db。 运行我的testing套件后,我可以在我的数据库中find具有我的testing套件中的凭证的用户。 我有一种感觉,这与我在app.js中连接的事实有关,但是我迷路了。 这是相关的代码: app.js: var express = require('express'); var path = require('path'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var app = express(); var mongoose = require('mongoose'); var db; mongoose.connect('mongodb://****:****@ds053438.mlab.com:53438/express-crud'); db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error: ')); require('./router')(app); 路由器/控制器: var User = require('../../models/user'); var routes = function(app) […]

MongoDB随机无法删除分片数据库

我有几个使用真正的MongoDB数据库版本3.2的集成testing。 用Mocha运行testing,并在每次testing之后使用以下代码删除testing数据库。 它使用Mongoose 4.4.12版本和本地MongoDB Node.js驱动程序。 afterEach((done) => { const connection = mongoose.createConnection(config.db.host); connection.once("open", () => { connection.db.command({ dropDatabase: 1 }) .then((res) => done(null, res)) .catch(done); }); }) 它很好地工作,直到我在我的本地环境中启用分片以覆盖testing。 丢弃数据库开始随机失败。 上面的代码在每三次testing运行中都没有放弃我的testing数据库。 我的分片设置是最小的,有一个configuration服务器,一个蒙哥马斯和两个蒙哥碎片。 在我添加了一些日志logging之后,我发现connection.db.command({ dropDatabase: 1 })在这些失败的运行中返回{ info: 'database does not exist', ok: 1 } 。 数据库没有被删除,因为MongoDB认为它已经被删除,即使不是这种情况。 我完全错了吗? 是否有一些Mongoose / MondoDB的Node.js本地驱动程序configuration,或者我在这里失踪? 或者这是一些已知的问题? 任何帮助深表感谢。 编辑:同样的事情发生,如果我直接使用MongoClient ,所以mongoose不会造成这种情况。

编译React本地源代码以用于Mochatesting

随着React Native v0.25.0和0.26.0的最新变化将React和React Native分离出来,我开始遇到一个问题,我的unit testing使用Mocha将不再运行,因为我的testinginit脚本试图编译从ES6反应本机源代码。 我的unit testing以前一直使用babel-register组合,并且忽略/包括node_modules/某些部分(请参阅我的基本testinginit脚本设置 )。 具体而言,init脚本失败, Error: Cannot find module 'ReactNative'parsingnode_modules/react-native/Libraries/react-native/react-native.js时Error: Cannot find module 'ReactNative' 。 在检查这个文件时,确定你在那里find一个require('ReactNative')行; 承诺完全分离出React / RN的结果 。 我可以理解为什么Node和babel-register在这里死去 – 这require不遵循正常的约定,但似乎是节点加速系统FB已经为RN项目的一部分。 这个问答有助于我们进一步了解这个问题,但是看起来我并没有任何办法可以让我的摩卡testing运行,因为我不能在巴贝尔传译中join节点匆忙,运行testing。 当它与RN v0.26.0兼容的时候,我会尝试一下react-native-mock ,但是如果没有它,我们就可以重新运行我的unit testing了,因为以前我不需要它。 我在我的摩卡堆中错过了什么,这将使这个神奇的工作? 我不理解React Native堆栈会帮助我解决这个问题,而且还会testing我的各个部分? (注意:我主要testingAPI元素,动作创build者/缩减器和各种实用程序方法, 而不检查React组件的渲染输出。)