Articles of 摩卡

如何撰写asynchronous瀑布的摩卡testing

我为asynchronous瀑布写了一个mochatesting用例,“function2”是调用mongodb获取数据的模块,当我尝试在node.js中运行相同的代码时,这个asynchronous代码工作,但是当我做摩卡testingmongodb的“function2”调用会抛出错误:“[Error:Can not determine state of server]”。 我知道testing快速执行的原因,而不用等待mongodb连接并返回结果。 有人可以build议我如何解决这个问题。 提前致谢。 var function1 = require('../../method1'); var function2 = require('../../method2'); var function3 = require('../../method3'); describe('controller : ', function () { it('should not return error', function (done) { async.waterfall([ function(callback){ function1.method1(app.request, app.response, function(err,result) { if(err){ callback(err,null); } else{ var var1 = result; callback(null, var1); } }); }, function(var1, callback){ […]

节点最佳实践:在构造函数中抛出asynchronous错误

我正在与节点工作,我有一个“类”,将目录作为参数。 它试图创build该目录,如果失败,则会抛出一个错误: function Config(dir) { fs.mkdir(dir, function(err) { if(err) throw new Error('Error', err); } } 我的问题是,这是一个批准的方式吗? 如果我要使用callback,那么我的程序的其余部分将不得不驻留在callback中,这对我来说似乎很奇怪。 这个问题performance出来,当我试图用摩卡写一个testing,因为在asynchronous调用引发exception,将无法正常工作: it('should throw an error on a bad directory', function() { var fn = function() { var badConfig = new Config('/asdf'); }; assert.throws(fn, Error); }); 我已经调查域作为解决unit testing问题的一种方式,但是这似乎并没有解决我的问题(或者我没有正确实施)。 var d = domain.create().on('error', function(err) { throw err; } d.run(function() { […]

nodejs中的selenium-webdriver不返回当前标题

我正在通过selenium驱动程序的例子,它没有工作。 几个月前,它工作得很好,所以我想知道如果我做错了什么,或者如果testing方法已经改变。 var assert = require('assert'), test = require('selenium-webdriver/testing'), webdriver = require('selenium-webdriver'); var By = webdriver.By; test.describe('Google Search', function() { test.it('should work', function(done) { var driver = new webdriver.Builder(). withCapabilities(webdriver.Capabilities.chrome()). build(); driver.get("http://www.google.com"); driver.findElement(By.name("q")).sendKeys("webdriver"); driver.findElement(By.name("btnG")).click(); driver.getTitle().then(function(title) { assert.equal("webdriver – Google Search", title); done(); }); driver.quit(); }); }); 输出是: AssertionError: "webdriver – Google Search" == "Google" Expected […]

在Restify中使用testing数据库

我创build了一个简单的Restify服务器,并使用自己的JSONclient通过Mocha开始testing它的function。 当unit testingfunction时,可以设置指示testing设置的ENV var,并连接到相应的mongodb数据库。 但是,当使用JSONClient时,显然,testing已经连接的“运行”API服务器。 是否有任何方法通过开关数据库连接,通过客户端的端到端testingAPIfunction,以不覆盖开发数据库? 编辑:我想我可以添加一个方法沿着“switchDataConnection”的行,将切换到testing数据库,但感觉肮脏和哈克。

before()在之后的describe()之前不执行?

给出以下代码: var api = {}; var models = {}; describe(vars.project.name, function() { before(function(done) { // Loading models models_module.getDbInstance('0.1', function(res) { db = res; var config = { server: server, db: db, v: '0.1' }; // Importing all the tests api.base = require('./functions/api.base.js')(config); models.test_table = require('./functions/models.test_table.js')(config); done(); }); }); // Tests general status describe('checking the status […]

在selenium-webdriver.jstesting中获取testing标题和状态

我正在用selenium-webdriver.js写摩卡testing,并且只在当前testing失败的情况下尝试截图。 在摩卡,我可以得到当前的testing信息,如标题和状态,如下所示: afterEach(function(){ console.log('afterEach', this.currentTest.title, this.currentTest.state); }); 但是,selenium-webdriver.js使用selenium-webdriver / testing封装了Mocha的接口,原来的这个currentTest不再暴露: var test = require('selenium-webdriver/testing'); test.afterEach(function(){ //console.log('afterEach', this.currentTest.title, this.currentTest.state); }); 我想知道这样的信息是否仍然暴露出来或有任何解决方法。

从callback中返回一个值,或者在node.js中的特定callback之外访问它?

//geoSpacialRepository.js var geoSpatialRepository = {}; var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/repository'); var Schema = mongoose.Schema; var LocationSchema = new Schema({ type: String, coordinates: [Number,Number] }); var Location = mongoose.model('locations', LocationSchema); var db = mongoose.connection; geoSpatialRepository.find = function(){ var query = Location.find({}, function(error, data){}); query.exec(function(err, data){ console.log("DATA ************************** "); console.log (JSON.stringify(data)); }); } exports.geoSpatialRepository = geoSpatialRepository; 我写的地方console.log […]

Locomotive.js在调用“locomotive.boot”时抛出错误

我试图在我的locomotive.js应用程序上编写testing,从字面上从互联网上的一些例子复制/粘贴代码。 即使如此,每当我运行我的testing,我得到一个错误说 TypeError: string is not a function 当我检查locomotive.boot(使用locomotive.boot.length)期望的参数的数量,它说2 …但在每一个在线的例子(继续,谷歌它)的文档似乎说3.有谁知道我做错了什么? 这是我的代码: var locomotive = require('locomotive'), should = require('should'), request = require('supertest'); var app, server; describe('Application', function() { before(function(done) { locomotive.boot( __dirname+"/..", "test", function(err, express) { if (err) throw err; app = this; express.listen(4000, '0.0.0.0', function() { var addr = this.address(); console.log('Server started. [Env: '+SOPS.conf.get('app:environment')+'] [Addr: […]

摩卡bdd风格testing命名

我正在使用Mocha作为testing我的node.js项目的testing框架。 我想遵循BDD风格来组织我的testing/规格。 我曾经写过一些使用黄瓜的testing,它使用了BDD风格,就像给定when-then子句一样 。 但对于摩卡来说,它使用不同的语言来描述规格。 您可以使用嵌套的描述语句来描述规范。 我想知道命名Mochatesting的最佳做法是什么。 谢谢。

用“暂停”来覆盖摩卡“it”来支持“yield”

在我的testing中使用暂停程序包处理asynchronous调用时,我想以更“干”的方式来编写规格。 例如下面的代码 it('works like fifo queue', function(done) { suspend.run(function*() { yield transport.enqueue({a:1}); yield transport.enqueue({b:1}); (yield transport.dequeue()).should.eql({a: 1}); (yield transport.dequeue()).should.eql({b: 1}); }, done); }); 可以简化为: it('works like fifo queue', function*() { yield transport.enqueue({a:1}); yield transport.enqueue({b:1}); (yield transport.dequeue()).should.eql({a: 1}); (yield transport.dequeue()).should.eql({b: 1}); }); 如何覆盖摩卡的“it”函数来包装生成器函数?