Articles of 摩卡咖啡

用mocha和sinon-chaitesting中间件的使用情况

我在testingmiddelware的使用上遇到一些问题,需要你的帮助! configuration我的app: var express = require('express'); var path = require('path'); var errorHandler = require('errorhandler'); var routes = require('./routes'); var morgan = require('morgan'); module.exports = function(app) { app.set('port', process.env.PORT || 3300); app.use(morgan('dev')); app.use('/public', express.static(path.join(__dirname, '../public'))); routes.initialize(app); if ('development' === app.get('env')) { app.use(errorHandler()); } return app; }; 我想用testing来覆盖它(使用摩卡,并用sinon-chai作为存根和间谍)。 所以当我为摩根语写作testing用例时: app.use(morgan('dev')); 我设置app.use()作为间谍,并期望它与摩根('dev')作为唯一的参数。 var app; var express = require('express'); […]

testing总是与诗乃和柴一起传递

我正在使用Mocha,Chai和Sinon来testing一些Node方法。 这个testing通过,当我把'calledOnce'改为'calledTwice'时,它会按预期的那样失败。 it('should call checkIfRoomExists once', function (done) { var check = sandbox.spy(RoomInfoModel, 'checkIfRoomExists'); ViewBusiness.getViewToRender("thisisanoneknownroom", function (viewName) { expect(check.calledOnce).to.equal(true); done(); }) }); 但是,当我尝试并按照教程“设定”是这样设置的: it('should call checkIfRoomExists once', function (done) { var check = sandbox.spy(RoomInfoModel, 'checkIfRoomExists'); ViewBusiness.getViewToRender("thisisanoneknownroom", function (viewName) { expect(check).to.have.been.calledTwice; done(); }) }); 请注意,我在第二个testing中正在testing“calledTwice”。 它仍然通过。 如果我将它更改为“notCalled”,它仍然通过。 基本上它总是通过。 我错过了什么?

Sinon js用确切的参数检查存根

Sinon js用确切的参数检查存根 要求:我想testing用正确的参数调用ejs.renderFile。 我的函数文件:html_to_pdf_converter.js var ejsToPdfConvert = function (template, data, callback) { var row = data.voucher; html = ejs.renderFile( path.join(__dirname+'/../../views/', template), { data: data }, function (error, success) { if (error) { callback(error, null); } else { var pdfPath = getPdfUploadPath(row); htmlToPdf.convertHTMLString(success, pdfPath, function (error, success) { if (error) { if (typeof callback === 'function') […]

摩卡和锡诺testing与承诺超时

我有我的testing使用Sinon和摩卡以下代码。 每当我运行这些testing时,我都会看到以下的结果 0 passing (747ms) 8 pending 1 failing 1) Customer displays order Given that the order is empty "before each" hook for "will show no order items": Error: Timeout of 500ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. testing通过,直到我开始将承诺纳入图片,并使testing更现实,即设置处理asynchronous调用。 我做错了什么,如何让testing通过? tests.js 'use strict'; require("babel-register"); […]

事件没有捕获我的testing与残桩function

我遇到了一个我不明白的问题。 我发出的事件在我的testing中没有被捕获。 这是下面的代码( event.js ): var util = require('util'), proc = require('child_process'), EventEmitter = require('events').EventEmitter; var Event = function() { var _self = this; proc.exec('ls -l', function(error, stdout, stderr) { _self.emit('test'); console.log('emitted'); }); }; util.inherits(Event, EventEmitter); module.exports = Event; 而相应的testing: var proc = require('child_process'), sinon = require('sinon'), chai = require('chai'), expect = chai.expect, Event = […]

unit testingasynchronouscallback的快速路由

我正在使用express在node.js中编写一个应用程序。 我从快递中分离出路线定义,所以我可以在不嘲笑快递的情况下进行unit testing。 我做的是: 文件:usersRoutes.js var routes = { getAll: function(req,res) { var db = req.db; // req.db is initialized through a dedicated middleware function var usersCollection = db.get('users'); usersCollection.find({},{limit:10},function(e,results){ res.send(results); }); } }; module.exports = routes; 文件:users.js var express = require('express'); var router = express.Router(); var routes = require('./usersRoutes'); /* GET users listing. */ […]

Sinon.stub不会吝啬私人方法

在下面的模块中,我有一个私人的方法,创build一个临时目录。 我正在编写这个模块的testing, resize ,并希望存根其私有的方法createTmpFile并返回一个虚假的目录。 我正在用sinon做这个,但是原来的方法仍然被调用。 我已经尝试要求var _private = require('../lib/modules/resizer')._private; 然后用tmpStub = sinon.stub(_private, 'createTmpFile', function () { return "/temporary/"});其tmpStub = sinon.stub(_private, 'createTmpFile', function () { return "/temporary/"});我的testing套装中tmpStub = sinon.stub(_private, 'createTmpFile', function () { return "/temporary/"}); 这不会抛出错误,但仍然停止被调用的function。 我如何用存根replace私有方法? resize 'use strict'; // dependencies var gm = require('gm').subClass({ imageMagick: true }); var tmp = require('tmp'); var async = […]

使用nodejs,mocha,chai和sinon我想存根在路由中调用的函数

我有一个非常简单的应用程序,它是nodejs,express和mysql我是新的unit testing,我认为这个应用程序是一个很好的方法来做得更好。 我试图完成(我认为sinon是答案)是模拟或存根mysql.insertEventIntoDB和rabbit.addToRabbitMQ 在我的应用程序中,我有 app.use('/sendgrid', sendgrid(pool, config, logger) ); 在我的sendgrid.js中 var express = require('express'); var mysql = require('../app/utils/mysql'); var rabbit = require('../app/utils/rabbitMQ'); module.exports = function (dbpool, config, logger) { var router = express.Router(); router.post('/callback', function (req, res) { for (var x=0 ; x < req.body.length ; x++ ){ mysql.insertEventIntoDB(dbpool, req.body[x], logger); rabbit.addToRabbitMQ(config,req.body[x], logger) } res.json({ […]

在sinon中创build一个假的object.method()从头开始?

TL;博士 如何在sinon中创build一个object.method()从头开始? 上下文 例如,我有一个Parser类的家庭,其中每个实现#parse(text)方法,并返回一个ParseTree对象或返回null 。 我正在进行unit testing,我没有testingParser对象(他们在别处testing过),但是我需要一个可testing的对象来响应#parse() 。 我可以实例化和存根真正的parsing器,但是拖拽不必要的代码到这部分testing中。 这个问题 我很确定,使用sinon的spy(),stub()和/或mock()api很容易,所以:我如何创build一个可testing的对象: 响应parse()方法 validation它被调用一次 返回一个我指定的任意对象? 我试过了 下面的例子在sinon.stub()的调用中失败了,因为sinon.spy()对象不能用parse方法存根sinon.spy() 。 (这个例子也应该validationfake_parser.parse()被test_text调用了一次,但是没有): var test_text = 'any text' var fake_parse_tree = sinon.spy() var fake_parser = sinon.stub(sinon.spy(), 'parse').returns(fake_parse_tree) expect(fake_parser.parse(test_text)).to.equal(fake_parse_tree)

Sinon / Node / Express / Mongo – TypeError当试图模拟Mongo DB.collection函数

我正在编写Express / Mongo应用程序的unit testing,并试图用Sinon来模拟Mongo库,这样我就可以在不需要数据库的情况下testing行为。 我正在使用co模块来消费Mongo库对Promise的使用。 下面列出的testing生成下面的错误: [TypeError: db.collection is not a function] TypeError: db.collection is not a function at /myApp/services/v1/project.js:76:20 at next (native) at onFulfilled (/myApp/node_modules/co/index.js:65:19) project.js中的第76行对应于这一行“var col = db.collection('project');”。 如其他地方所build议的,我用Db.prototype嘲笑Db对象。 testProject.js describe('Project Services Tests', function() { it('Test Create Project', function(done) { var response = buildResponse(); var request = HttpMocks.createRequest({ params: {'name': UNITTESTPROJECT}, body: { […]