Articles of 摩卡

摩卡如何知道只有我的asynchronoustesting等待和超时?

当我使用Mocha进行testing时,通常需要运行asynchronous和同步testing的组合。 摩卡处理这个美丽的让我指定一个callback, done ,只要我的testing是asynchronous的。 我的问题是,摩卡如何在内部观察我的testing,并知道它应该等待asynchronous活动? 它似乎随时等待我的testing函数中定义的callback参数。 您可以在下面的示例中看到,第一个testing应该超时,第二个应该继续并在user.save调用匿名函数之前完成。 // In an async test that doesn't call done, mocha will timeout. describe('User', function(){ describe('#save()', function(){ it('should save without error', function(done){ var user = new User('Luna'); user.save(function(err){ if (err) throw err; }); }) }) }) // The same test without done will proceed without timing out. describe('User', function(){ […]

使用Mochatesting框架的HTML报告

我一直在使用NodeJS和Mocha生成一些testing,我想find一种方法将结果放到浏览器中。 我知道摩卡支持使用'html'记者和mocha init <dir>但是这两者似乎都不适合我(记者实际上甚至没有运行testing就抛出错误)。 有人能给我一个通过Mocha运行testing并生成HTML报告的好例子吗?我想模仿的一个例子是在visionmedia网站上。 另外,为了例子,我们会说我正在使用名为example.js的testing文件。 在此先感谢您的帮助,但令人惊讶的是这里有很less的例子。

在摩卡testing预期的失败

使用摩卡,我试图testing一个构造函数是否抛出一个错误。 我还没有能够使用期望的语法做到这一点,所以我想要做到以下几点: it('should throw exception when instantiated', function() { try { new ErrorThrowingObject(); // Force the test to fail since error wasn't thrown } catch (error) { // Constructor threw Error, so test succeeded. } } 这可能吗?

用Mocha和SupertesttestingExpress错误

例如,我必须在验收testing中testing服务器错误(Express),例如,验收testing不能(或不应该)发送响应 错误:发送后无法设置标题。 捕获error handling程序的错误和5XX代码响应将提供有价值的反馈在这里,但问题是头已经发送。 这类错误可能并不严重,难以发现,通常可以从日志中找出。 规范是 it('should send 200', function (done) { request(app).get('/').expect(200, done); }); 和testing的应用程序是 app.get('/', function (req, res, next) { res.sendStatus(200); next(); }); app.use(function (req, res) { res.sendStatus(200); }); 快速app实例和请求testing库(即Supertest)在类似情况下进行通信的最适合的方式是什么? 问题不限于Supertest。 如果有包可以解决Supertest无法解决的问题,也可以考虑。

为什么在使用Bootstrap时,zombie.js浏览器会返回空的HTML?

我正在尝试使用Mocha和Zombie来testing我的Node.js / Express.js应用程序。 我可以通过简单的testing,但只要将Twitter Bootstrap的脚本标记添加到我的视图中,浏览器对象就会返回空的HTML。 这是我的testing代码: process.env.NODE_ENV = 'test'; var app = require('../app'); var assert = require('assert'); var Browser = require('zombie'); describe('home page', function() { before(function() { this.server = app.listen(3000); this.browser = new Browser({site: 'http://localhost:3000', debug : true}); }); it('should show welcome', function(done) { var browser = this.browser; browser .visit("/") .then(function() { console.log(browser.html()); }) .fail(function(error) […]

如何在基于Express的API上设置代码覆盖率?

我一直在这个问题一段时间,我不能让现有的解决scheme为我工作。 我有一个用Express.js编写的Node.js API。 我一直在使用Mocha,Chai和Supertest为API编写testing。 这些testing主要是集成testing。 一个testing可能看起来像: it('should fail to register a new user without the proper information', function(done) { api.post('/user') .send({}) .expect(400) .expect('Content-Type', /json/) .end(function(err, res) { should.exist(res.body); should.exist(res.body.error); should.not.exist(err); res.body.error.should.contain('Username'); res.body.error.should.contain('password'); done(); }); }); 实际的testing工作很好,但现在我需要能够查看这些testing的代码覆盖率。 我必须知道我没有做足够的testing。 我尝试过使用摩卡的testing范围: mocha -R html-cov –coverage > coverage.html 和伊斯坦布尔的: istanbul cover _mocha — -R spec –timeout 5000 两者都遭受同样的问题: 你看,这是一个示例路线(用户注册)。 […]

JavaScripttesting(摩卡)与'import'js文件

我理解module.export并require module.export : 需要外部js文件进行摩卡testing 虽然只要它是一个模块就可以使用,但我觉得这种方式不方便,因为我现在打算做的是在一个文件中testing代码。 例如,我有一个文件中的代码: app.js 'use strict'; console.log('app.js is running'); var INFINITY = 'INFINITY'; 现在,我想在一个文件中testing这个代码: test.js var expect = require('chai').expect; require('./app.js'); describe('INFINITY', function() { it('INFINITY === "INFINITY"', function() { expect(INFINITY) .to.equal('INFINITY'); }); }); testing代码执行app.js ,所以输出是; app.js is running 然后 ReferenceError: INFINITY is not defined 这不是我所期望的。 我不想使用module.export和写 var app = require('./app.js'); 和 testing代码中的每行都app.INFINITY和app.anyOtherValue 。 […]

如何用mocha / chai模拟窗口/文档

当我尝试unit testinggetElement函数 class BarFoo { getElement() { return document.querySelector('#barfoo'); } } 摩卡对document一无所知,所以我想你可能会这样做: beforeEach(() => { global.document = { querySelector: () => { … } } } 虽然这有效,但我想知道这是否是正确的方法,也许有解决这个问题的软件包,因为如果使用更多的浏览器API,我的方法可能会很费力。

在每个套件之前运行Mocha设置,而不是在每个testing之前

使用NodeJS和Mocha进行testing。 我想我明白before()和beforeEach()是如何工作的。 问题是,我想添加一个在每个“描述”之前运行的安装脚本,而不是在每个“它”之前运行。 如果我before()使用它,整个套件只运行一次,如果使用beforeEach()它会在每次testing之前执行,所以我试图find一个中间的基础。 所以,如果这是我的testing文件: require('./setupStuff'); describe('Suite one', function(){ it('S1 Test one', function(done){ … }); it('S1 Test two', function(done){ … }); }); describe('Suite two', function(){ it('S2 Test one', function(done){ … }); }); 我希望“setupStuff”包含一个在“套件一”和“套件二”之前运行的函数, 或者换句话说,在“S1testing一”和“S2testing一”之前,而不是在“S1testing二”之前。 可以这样做吗?

摩卡监控应用输出

我正在为nodejs web应用程序构build一个日志logging模块。 我想能够使用mochatesting,我的模块输出正确的消息到terminal 。 我一直在环顾四周,但还没有find任何明显的解决scheme来检查这一点。 我已经发现 process.stdout.on('data', function (){}) 但一直没有能够得到这个工作。 有没有人有任何build议?