Tag: 摩卡

引导一个摩卡testing套件

我有许多testing分布在Node JS应用程序的多个文件中。 我想在Mocha执行任何testing文件之前运行引导代码。 例如,我可以在每个实际testing中设置全局variables。 示例引导代码 global.chai = require('chai'); global.expect = chai.expect; global.sinon = require('sinon'); 看起来Mocha按字母顺序加载/testing所有文件,所以如果我将这个引导代码命名为“bootstrap.js”,并且其他所有的文件都以“B”开始,那么它就起作用了。 显然,这是脆弱和糟糕的,但是我不想把这个样板文件放在每个testing文件的顶部。 我如何告诉摩卡首先加载引导脚本,或创build一些function相当的东西?

摩卡开始平行描述

我希望能够把所有在摩卡的描述语句都平行推开。 有人可以帮我弄清楚如何做到这一点?

testing失败的承诺与摩卡的内置承诺支持

我应该怎样用摩卡和柴来testing我的诺言失败了? 我很困惑,因为我最初认为我应该使用'mocha-as-promised',但是这个包现在已经被弃用了(我正在使用mocha 2.1.0),build议只使用现在内置的promisevalidation摩卡。 请参阅: https : //github.com/domenic/mocha-as-promised 另一篇文章build议废除it()callback的“完成”参数 – 不知道为什么,因为我理解传入“done”参数是表示testing正在被asynchronoustesting的方式。 见: 我如何正确地testing摩卡和柴的承诺? 无论如何,我试图减less我的问题到下面的代码 – 请帮我修改这个,以便我可以testing我的承诺确实失败。 it.only("do something (negative test)", function (done) { var Q = require('q'); function makePromise() { var deferred = Q.defer(); deferred.reject(Error('fail')); return deferred.promise; }; makePromise() .then(done, done); });

用摩卡运行节点检查器

我似乎无法debugging摩卡脚本。 我能够像这个node –inspect script.js检查器运行节点。 这然后给了我一个url去debugging,如chrome-devtools://devtools/remote/… 但是,当我用摩卡这行mocha –inspect test.js我无法debugging。 它说'侦听器在[::]:5858'上侦听。 有没有办法让我使用节点的检查器来debugging摩卡testing? 去localhost:5858给我这个信息: Type: connect V8-Version: 5.1.281.84 Protocol-Version: 1 Embedding-Host: node v6.9.1 Content-Length: 0 使用–inspect –debug-brk没有帮助。

NodeJS超级访问会话对象

我用supertesttesting我的Node.js应用程序。 在我的控制器中,我访问会话对象。 为了提出有效的请求,这个会话对象需要填充一些数据。 调节器 // determine whether it is user's own profile or not var ownProfile = userId == req.session.user._id ? true : false; testing it('profile', function (done) { testUserOne.save(function(error, user){ request .agent(server) .get('/profile?userId=' + user._id) .expect('Content-Type', /html/) .expect(200) .expect(/Profile/) .end(done); }) }); 题 我怎样才能嘲笑的REQ /会议对象?

使用Sinon-Chai时,失败的testing显示“错误:超过2000ms超时”

我有以下路线(快递),我正在编写一个集成testing。 代码如下: var q = require("q"), request = require("request"); /* Example of service wrapper that makes HTTP request. */ function getProducts() { var deferred = q.defer(); request.get({uri : "http://localhost/some-service" }, function (e, r, body) { deferred.resolve(JSON.parse(body)); }); return deferred.promise; } /* The route */ exports.getProducts = function (request, response) { getProducts() .then(function (data) { response.write(JSON.stringify(data)); […]

摩卡超时与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 […]