Articles of 摩卡

摩卡超时与Q承诺失败的断言

为什么在Q未来内断言失败时,摩卡会超时? 发生这种情况时,您也不会看到断言失败。 这不会发生,如果我只使用callback。 我应该怎么写,而仍然使用期货,但看到断言错误,而不是超时? var Q = require('q'); function hack() { var ret = Q.defer(); ret.resolve(true); return ret.promise; } it('test', function(done) { hack().then(function(bool) { assert(false); done(); }); });

如何对使用命令行参数的工具进行unit testing

我正在使用mocha为使用命令行参数 npm模块的工具编写unit testing。 不幸的是,用于摩卡的选项是由我的工具中的命令行参数select的,如果这些选项不存在于我的工具中,它会忠实地抛出一个错误。 例如,如果我这样做… mocha –watch …然后命令行参数抛出: UNKNOWN_OPTION:未知选项: – 观看 我可以通过在我的工具中做这样的事情来解决这个问题。 var cli = commandLineArgs([ { name: 'verbose', alias: 'v', type: Boolean }, { name: 'timeout', alias: 't', type: Number }, { name: 'watch'} // So I can do mocha –watch ]); …但是,然后cli.getUsage()说我的工具有一个cli.getUsage()选项。 当然,如果我想向摩卡传递更多的select,这就会失控。 什么是“告诉”命令行参数忽略我的scheme中的选项的最佳方法?

testingchild_process.exec标准输出

我试图用摩卡testingsubprocess的输出。 我的testing看起来像这样: var should = require("should"), exec = require("child_process").exec; describe('users', function() { describe('andrei', function() { exec('id andrei', function(error, stdout, stderr) { it('should be part of group dev', function() { stdout.should.containEql('dev'); }) }) }) }) 我遇到的问题是it永远不会被执行。 我可以交换代码,把exec放在里面,然后用done来确保按照正确的顺序运行,但是这意味着我将不得不为每个testing运行相同的exec,标准输出。 我怎样才能有多个it声明对儿童进程的标准输出?

在这个使用supertest和Node.js的testing中,res.body是空的

我正在用supertesttesting一个Node.js API,我无法解释为什么res.body对象超集返回是空的。 数据显示在res.text对象中,但不res.body ,任何想法如何解决这个问题? 我正在使用Express和body-parser : app.use(bodyParser.json()); app.use(bodyParser.json({ type: jsonMimeType })); app.use(bodyParser.urlencoded({ extended: true })); 这是我正在testing的API方法: app.get(apiPath + '/menu', function(req, res) { var expiration = getExpiration(); res.set({ 'Content-Type': jsonMimeType, 'Content-Length': jsonTestData.length, 'Last-Modified': new Date(), 'Expires': expiration, 'ETag': null }); res.json({ items: jsonTestData }); } 以下是我对这个API方法执行的testing: describe('GET /menu', function() { describe('HTTP headers', function() { it('responds with […]

在摩卡testing过程中将stdout和stderr静音

我会通过承认我可能正在做一些我不应该做的事情来做序。 但是既然我已经深深的了解了,我也可以理解为什么事情会这样发生。 我正在使用摩卡来testing一些Node.js代码。 此代码使用Winston日志库,它直接调用process.stdout.write()和process.stderr.write() ( source )。 它运作良好; 我对这种行为没有抱怨。 但是,当我对这段代码进行unit testing的时候,Mochatesting运行器的输出偶尔会穿插一些日志输出行,这在一些记者( dot , bdd )中是丑陋的,而在其他记者( bdd )中是彻头彻尾的无效的。 我想在不修改或inheritanceWinston的情况下阻止这个输出,而且我想避免修改应用程序本身,如果我可以避免的话。 我到达的是一组实用函数,它们可以用一个无操作函数暂时replaceNode的内build函数,反之亦然: var stdout_write = process.stdout._write, stderr_write = process.stderr._write; function mute() { process.stderr._write = process.stdout._write = function(chunk, encoding, callback) { callback(); }; } function unmute() { process.stdout._write = stdout_write; process.stderr._write = stderr_write; } 在各种testing规范中,我直接在产生不需要的输出的任何调用或断言之前调用了mute() ,并在之后直接unmute() 。 这感觉有点不好意思,但是工作起来 – […]

如何在Express中模拟中间件跳过unit testing的身份validation?

Express中有以下内容 //index.js var service = require('./subscription.service'); var auth = require('../auth/auth.service'); var router = express.Router(); router.post('/sync', auth.isAuthenticated, service.synchronise); module.exports = router; 我想覆盖或模拟isAuthenticated返回这个 auth.isAuthenticated = function(req, res, next) { return next(); } 这是我的unit testing: it('it should return a 200 response', function(done) { //proxyquire here? request(app).post('/subscriptions/sync') .set('Authorization','Bearer '+ authToken) .send({receipt: newSubscriptionReceipt }) .expect(200,done); }); 我试过使用proxyquire嘲笑index.js – 我想我需要存根路由器? 我也尝试在testing中覆盖 […]

我应该从誓言转向摩卡吗?

我正在试图决定是否从一个大的节点应用程序从誓言切换到摩卡。 我已经享受了几乎所有的誓言经验 – 但是对于论证的传递只是有点奇怪。 我总是不得不挠头去记住主题是如何工作的,这会干扰写入testing的基础知识。 在深度嵌套的asynchronoustesting中,这是特别有问题的。 虽然我发现把Vows和async.js结合起来可以有所帮助。 所以摩卡在报告中似乎更加灵活。 我喜欢selecttesting风格的自由,重要的是它也在浏览器中运行,这将是非常有用的。 但是我担心它仍然不能解决深度嵌套asynchronoustesting的可读性问题。 有没有人有任何实际的意见 – 摩卡可以做深层嵌套testing可读? 我错过了什么吗?

尝试使用摩卡testing时,模型加载不正确

我正在尝试使用摩卡来testing我的快速应用程序。 我的文件夹结构是: myapp |-app |–models |-test |–mocha-blanket.js |–mocha |–karma |-server.js server.js是我的快递服务器。 我以前在options.require ,但文件说,使用blanket.js 。 我的mocha-blanket.js是: var path = require('path'); var srcDir = path.join(__dirname, '..', 'app'); require('blanket')({ // Only files that match the pattern will be instrumented pattern: srcDir }); 我的Gruntfile有: mochaTest: options: reporter: "spec" require: 'test/mocha-blanket.js' # require: "server.js" coverage: options: reporter: 'html-cov', captureFile: 'mocha-coverage.html' […]

在远程URL上重复使用Supertesttesting

我正在使用MochaJS和SuperTest在开发过程中testing我的API,绝对喜欢它。 不过,我也想把这些相同的testing变成远程testing我的登台服务器,然后把代码推到生产。 有没有办法通过远程URL或代理向远程URL提供请求? 这是我使用的一个testing样本 request(app) .get('/api/photo/' + photo._id) .set(apiKeyName, apiKey) .end(function(err, res) { if (err) throw err; if (res.body._id !== photo._id) throw Error('No _id found'); done(); });

如何使用Mocha和Nock重新testing相同的URL?

我正在使用Mocha,Chai,Sinon,Proxyquire和Nock。 对于这个特定的testing场景(要求提供这个问题),希望多次testing完全相同的URL,每个testing需要不同的响应。 例如,没有商家Feed,1商家Feed,还有2商家Feed的响应。 现有的代码都可以运行,而且如果我单独运行testing,它们会通过。 但是,如果我在单个套件中使用摩卡一起运行它们,则会失败。 相信问题是Nock劫持了给定URL的全局http对象,并且每个testing(同时asynchronous运行)都在争夺相同的全局响应引用。 在上面的情况中,用1个商家的回复准备的应答正在被设置覆盖,以与2个商家等进行响应。 有没有一种机制来避免这种情况的发生,例如保证在asynchronous摩卡testing用例(我相信是默认行为)的串行执行。