Articles of 摩卡

在运行摩卡unit testing时,如何避免在NodeJScallback式API中调用两次Q promise catch块?

我们在节点API中使用Q promise库,但允许通过callback调用函数。 例如: function foo(cb) { Q.fcall(function () { return true; }).then(function (result) { return cb(null, result); }).catch(function (err) { return cb(err, null); }); } 当我运行我的摩卡单位testing时,如果在callback中有一个exception,它会导致callback被调用两次。 例如: var called = 0; foo(function (err, res) { called++; console.log('err: ' + err); console.log('res: ' + res); console.log('called: ' + called); throw Error(throw Error from foo!'); }); 这给出了以下结果: […]

使用mocha.jstestingjQyery.get不起作用,其他延迟(RSVP)

我正在尝试使用mocha.js运行一些JavaScripttesting。 到目前为止,一切工作都非常好,但是我在testingjQuery请求或其他承诺/延期方面遇到了很大的问题。 我的代码在浏览器中工作得很好,以前大量使用$.Deferred但与摩卡我不能让它运行。 我尝试了不同的方式来编写它,并切换到一个“适当的”Promise库,因为显然jQuery被认为会给它的实现带来麻烦。 正确的RSVP.Promises工作正常, RSVP.Defer还没有,我不能得到任何工作涉及jQuery(如发出请求)。 我确实发现了一些build议,将jQuery包装到适当的Promise中,应该可以做到这一点,但是找不到任何真正做到的方式,这样做不会失败。 这是一个testing用例来显示这个问题: 'use strict'; var RSVP = require('rsvp'); var $ = require('jquery'); describe('promises', function() { it('works with RSVP.Promise', function(done) { new RSVP.Promise(function(resolve, reject) { resolve(); }).then(function() { done(); }); }); it('works with RSVP.Deferred promise', function(done) { RSVP.defer().done(function() { done(); }).resolve(); }); it('works with $.Deferred', function(done) { $.Deferred().done(function() { done(); […]

为什么我在testing中得到401回应?

我正在尝试在Node / Express / Mongoose后端testing一个具有身份validation的路由。 这是testing文件 var should = require('should'); var _ = require('lodash'); var async = require('async'); var app = require('../../../../app'); var request = require('supertest'); var mongoose = require('mongoose'); var User = mongoose.model('User'); var Firm = mongoose.model('Firm'); var firm, user, userPassword, createdFirm, loggedInUser; describe('GET /api/firms', function(){ beforeEach(function (done) { firm = new Firm({ company: […]

摩卡testing,链接超级要求

所以我试图在我的快速应用程序中testing一个路线,为了做到这一点,我需要先login一个user然后再打我的电话。 我在beforeEach函数中创build并保存一个user 。 这是我写的testing: it('should update username', function(done){ var _this = this; req.post('/login') .send(_this.data) .then(function(res){ req.put('/users/' + res.body.user._id) .send({ username: 'robert'}) .expect(200) .end(function(err, res){ if(err) return done(err); console.log(res.body); res.body.success.should.equal(true); res.body.user.username.should.match(/robert/); done(); }); }); }); 这是我运行testing时得到的输出: Users Routes Authenticated POST /login 200 195.059 ms – 142 PUT /users/568a432e1daa24083fa6778a 401 2.785 ms – 21 1) should update […]

摩卡如何公开一个节点控制器函数来testing脚本

这是我的foo-controller.js 。 module.exports = function(params) { var router = require('express').Router(); var db = params.db var controller = {}; controller.getFoo = function (req, res) { // returns something } router.get('/foo', controller.getFoo); return router; }; 这里是我的test.js var chai = require('chai'); var expect = require('chai').expect; var bar = require('../api/controllers/bar/foo-controller'); console.log("Test", bar) // <- this returns the whole foo-controlelr.js […]

如何在调用时从spy.on(obj,'funcName')返回假数据?

我不知道有没有function! 请让我知道这有可能吗? 类似的东西: spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called. 那么我正在使用mocha , chai-spies

在摩卡初始化和实际testing之间共享variables

看样本: var app describe('application', function() { beforeEach(function(done) { app = initialize() }); afterEach(function(done) { app.close(done) }); it('some interaction with app', function () { /// }); }); app是从风格的angular度来看是坏的全局variables,使initialize不那么有用。 有没有更好的方式来分享appvariables?

testing:摩卡和节点不同

首先,虽然我是一个有经验的程序员,但我对节点相对比较陌生,而且对于摩卡来说是非常新的,所以我的问题可能就是我! 在这种情况下,我也乐意发现这一点! 我正在写的一些代码使用了一个npm模块,其中包含对fs.exists的调用。 当我通过节点vs运行vs mocha运行fs.exists运行testing时得到了不同的结果; 在我看来,我应该得到同样的答案。 该文件确实存在,所以在两种情况下结果都应该是true,但是在通过节点调用时为true,而在通过mocha调用时为false。 那么,它不能正常工作。 我知道fs.exists已被弃用,但是在我使用的npm模块中,所以除非我修改模块,这就是我正在使用的模块。 不同的是我如何调用摩卡。 根据一些网站的build议,我编辑了我的package.json文件,在“脚本”部分包含了下面的语句:“test”:“mocha test”,并且把testing放在这个“test”目录下。 这是通过npmtesting调用的。 遇到问题后,我也安装了npm install -g mocha。 我的testing文件是testVersion.js 结果是,当我通过节点npm test和mocha testVersion.js调用fs.exists时调用以下三种方法之一时,我得到了不同的答案; 我期待'真': – node testVersion.js返回true – 它find文件。 – mocha testVersion.js返回true – 它find文件。 – npmtesting返回false – 它没有find该文件。 我怀疑摩卡或节点的不同版本正在被调用,但没有足够的经验可以自行确定。 所以我的问题是:为什么我得到不同的结果? 这是我的代码testVersion.js var expect = require('chai').expect; var assert = expect.assert; var fs = require("fs"); var isInTest = typeof […]

如何在使用摩卡进行集成testing时处理elasticsearch的索引时间

我正在研究一个使用elasticsearch的节点项目。 我的testing链是吞咽,摩卡,柴,sin。 我很难让我的集成testing始终如一地工作。 我想加载数据库中的示例数据,然后运行一些testing。 我相信我有问题,因为我正在加载的文件没有索引我的testing使用它们运行的​​时间。 我已经通过执行以下操作来解决此问题: before(function (done) { testData.simpleLoadData(100, 2000); setTimeout(function () { done(); }, 5000); }); 这在当地正常工作,偶尔对travis有效。 当我把计时器升到10000时,一般都在两个地方工作。 有没有办法在这个testing代码诉诸setTimeouts? 手动处理时间使我有点娇气。 手动处理超时我有最好的select还是有更好的方法? 注意:这些是集成testing,我明确地想要使用外部依赖关系。 我有单位testing,不依赖于数据库已经。

如何防止摩卡离开状态为1的过程

我写了一个简单的node.js应用程序,现在我想添加一些testing。 现在我只有一些示例testing来testing我用于testing的Gitlab-CI,SonarQube和Mocha。 现在我的问题是,我想parsing摩卡的结果(记者是声纳 – 摩卡记者)。 我的问题是,如果testing失败,mocha退出状态为1的进程。 这意味着gitlab-ci打破了构build,不会跑到最后。 所以我不能像解释结果一样。 有没有办法configuration摩卡不破坏我的构build,以便它只保存在这个XML文件中的结果? 我开始摩卡: ./node_modules/.bin/mocha -R mocha-sonar-reporter –recursive –no-exit 并在我的package.json我有configuration: "config": { "mocha-sonar-reporter": { "outputfile": "build/reports/tests/TEST-mocha.xml" } },