Tag: 摩卡

在摩卡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用例(我相信是默认行为)的串行执行。

使用sinon.js创build一个基于真正的构造函数/原型的间谍方法的“间谍对象”

我正在使用sinon.js作为在我的Mochatesting中剔除依赖项的一种方法。 我更喜欢“间谍”方式,而不是经典的模拟方法,因为对间谍的反思似乎更清晰,并且比经典的模拟对象有些落后的思维更具灵活性。 这就是说,我想知道是否在为整个对象创buildtesting间谍时不正确地使用它。 比方说,我有一个testing依赖关系,它有4个方法,我想存根每个这些方法,并断言其中一个或两个。 目前我正在这样做: var spyObj = { aMethod: sinon.spy(), otherMethod: sinon.spy(), whatever: sinon.spy() }; 然后,我只是问像spyObj.aMethod.calledWith(a, b, c) 。 有没有更好的方法来模拟出整个类,而不是重复testing套件本身的方法的名称? 它看起来像sinon.stub()试图遍历给定的对象的所有成员,但这似乎并没有工作的方式来获取大多数对象的所有方法在更现代的JS运行时,如V8,除非对象实际上是可枚举的东西。 它也尝试猴子补丁的实际对象,而不是返回一个等价的,这是不可取的。 我只需要一个符合接口的对象,但行为像一个空对象,除非我另外说。 能够做这样的事情会很好: var spyObject = sinon.spy(MyClass.prototype); 如何在Node.js中find构造函数/原型的所有方法,以便制作如上所述的包装? 这更多的是关于剔除逻辑,而不是testing调用许多方法(我试图限制到一个,或在一个推二)。 例如,可能做不需要的I / O的事情,或者如果执行,则需要额外的复杂装置。

摩卡在每个testing之前和之后

我一直在尝试使用摩卡testing我的testing服务器。 这是我使用的以下代码,几乎与另一个类似的post中find的代码相同。 beforeEach(function(done) { // Setup console.log('test before function'); ws.on('open', function() { console.log('worked…'); done(); }); ws.on('close', function() { console.log('disconnected…'); }); }); afterEach(function(done) { // Cleanup if(readyState) { console.log('disconnecting…'); ws.close(); } else { // There will not be a connection unless you have done() in beforeEach, socket.on('connect'…) console.log('no connection to break…'); } done(); }); describe('WebSocket test', […]

在摩卡上运行supertest时,如何得到实际的服务器错误?

我有使用supertest和mocha的代码: import request from 'supertest'; //…. var newGame; describe('Creating game', function() { beforeEach(function(done) { request(app) .post('/api/games') .send({ owner: 'Mr. X', }) .expect(201) .expect('Content-Type', /json/) .end((err, res) => { if (err) { return done(err); } newGame = res.body; done(); }); }); describe('the created game', function() { it('should name the specified owner', function() { newGame.owner.should.equal('Mr. X'); }); […]

npm +摩卡 – 手表(不准确观看文件)

我使用摩卡npm,做一个“npmtesting”启动摩卡。 它在mocha.opts中启用了–watch,但由于某些原因,它不能准确地观察。 当我改变我的testing文件,然后保存它,不pipe是我进行了一个错误的testing还是一个好的testing,我都得到了同样的结果:0传递(绿色),而当我第一次运行摩卡时, 2传球。 有什么我失踪? 谢谢!