Articles of 摩卡

Mockgoose不拦截数据库调用

我使用mockgoose在一些控制器unit testing中模拟db。 运行我的testing套件后,我可以在我的数据库中find具有我的testing套件中的凭证的用户。 我有一种感觉,这与我在app.js中连接的事实有关,但是我迷路了。 这是相关的代码: app.js: var express = require('express'); var path = require('path'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var app = express(); var mongoose = require('mongoose'); var db; mongoose.connect('mongodb://****:****@ds053438.mlab.com:53438/express-crud'); db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error: ')); require('./router')(app); 路由器/控制器: var User = require('../../models/user'); var routes = function(app) […]

MongoDB随机无法删除分片数据库

我有几个使用真正的MongoDB数据库版本3.2的集成testing。 用Mocha运行testing,并在每次testing之后使用以下代码删除testing数据库。 它使用Mongoose 4.4.12版本和本地MongoDB Node.js驱动程序。 afterEach((done) => { const connection = mongoose.createConnection(config.db.host); connection.once("open", () => { connection.db.command({ dropDatabase: 1 }) .then((res) => done(null, res)) .catch(done); }); }) 它很好地工作,直到我在我的本地环境中启用分片以覆盖testing。 丢弃数据库开始随机失败。 上面的代码在每三次testing运行中都没有放弃我的testing数据库。 我的分片设置是最小的,有一个configuration服务器,一个蒙哥马斯和两个蒙哥碎片。 在我添加了一些日志logging之后,我发现connection.db.command({ dropDatabase: 1 })在这些失败的运行中返回{ info: 'database does not exist', ok: 1 } 。 数据库没有被删除,因为MongoDB认为它已经被删除,即使不是这种情况。 我完全错了吗? 是否有一些Mongoose / MondoDB的Node.js本地驱动程序configuration,或者我在这里失踪? 或者这是一些已知的问题? 任何帮助深表感谢。 编辑:同样的事情发生,如果我直接使用MongoClient ,所以mongoose不会造成这种情况。

编译React本地源代码以用于Mochatesting

随着React Native v0.25.0和0.26.0的最新变化将React和React Native分离出来,我开始遇到一个问题,我的unit testing使用Mocha将不再运行,因为我的testinginit脚本试图编译从ES6反应本机源代码。 我的unit testing以前一直使用babel-register组合,并且忽略/包括node_modules/某些部分(请参阅我的基本testinginit脚本设置 )。 具体而言,init脚本失败, Error: Cannot find module 'ReactNative'parsingnode_modules/react-native/Libraries/react-native/react-native.js时Error: Cannot find module 'ReactNative' 。 在检查这个文件时,确定你在那里find一个require('ReactNative')行; 承诺完全分离出React / RN的结果 。 我可以理解为什么Node和babel-register在这里死去 – 这require不遵循正常的约定,但似乎是节点加速系统FB已经为RN项目的一部分。 这个问答有助于我们进一步了解这个问题,但是看起来我并没有任何办法可以让我的摩卡testing运行,因为我不能在巴贝尔传译中join节点匆忙,运行testing。 当它与RN v0.26.0兼容的时候,我会尝试一下react-native-mock ,但是如果没有它,我们就可以重新运行我的unit testing了,因为以前我不需要它。 我在我的摩卡堆中错过了什么,这将使这个神奇的工作? 我不理解React Native堆栈会帮助我解决这个问题,而且还会testing我的各个部分? (注意:我主要testingAPI元素,动作创build者/缩减器和各种实用程序方法, 而不检查React组件的渲染输出。)

节点Mock-fs – / path / to / file不被模拟

在Mochaunit testing我的吞噬应用程序,并使用mock-fs回购模拟fs 。 在我的应用程序代码中,我有: console.log('sssssssssssssss ' + srcFile); srcFile = fs.statSync(srcFile).mtime; 其中显示了sssssssssssssss /home/one/foo 在我的testing中,我有: mock({ home: { one: { foo: mock.file({ content: 'nothing', mtime: new Date(Date.now()) }) }, }, bar: mock.file({ content: 'nothing', mtime: new Date(1,1) }) }); 但是当我运行testing时Error: ENOENT, no such file or directory '/home/one/foo'出现Error: ENOENT, no such file or directory '/home/one/foo' 。 我在做什么错在/home/one/foo没有被模拟?

使用Appium,Seleniumnetworking驱动程序,Node js,Mocha等select不在原生android应用程序的屏幕上的UI元素

我正在testing一个原生的Android应用程序,并需要点击屏幕底部的button。 我已经看到了很多使用Java和Javascript的例子,但我使用Node.js,似乎没有任何工作。 我对这个东西很新,在这么简单的事情上浪费了太多的时间。 例如,点击一个屏幕上的元素,这个工作: it("Select Button Test",function(){ return driver .setImplicitWaitTimeout(timeoutWait) .elementByXPath('//android.widget.TextView[@text=\'My Button\']').click(); }); 此外,完整的xpath适用于屏幕上的元素 – 在这种情况下: var myButton ='//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.TableLayout[1]/android.widget.TableRow[10]'); it("Select Button Test",function(){ return driver .setImplicitWaitTimeout(timeoutWait) .elementByXPath(myButton).click(); }); 通过在testing运行时滚动到该button,并在appium检查器中启动屏幕,我find了该button的完整xpath。 我已经尝试了各种滚动,触摸,并从networking驱动器文档的刷卡方法,但没有什么是显而易见的,我已经离开了蓬松… 那么如何访问不在屏幕上的button呢? 我敢肯定它的一些世俗的细节。 谢谢!

使用Visual Studio 2013debugging摩卡testing

我发现的大多数指南都有旧的和不可达的链接和例子。 我有一些摩卡testing,并试图用Visual Studio 2013进行debugging。目前我刚刚使用命令从命令行运行它们: mocha tests –require tests/helpers/chai.js –reporter spec 我见过的地方可以添加–debug-brk ,然后附加到进程。 我得到Debugger listening on port 5858但我没有看到附加窗口中的端口5858进程。 我错过了一些步骤? 我可以在NodeJS项目上debugging正常的nodejs代码(我有安装visual studio的nodejs工具) 谢谢

jsdom – 运行我的摩卡testing时没有定义选项

我正在使用节点JS工具的Visual Studio 2015年,我正在写我的JavaScript和jQuery的摩卡testing,在我的本地环境我使用业力和铬运行testing,一切工作正常,但由于某种原因,我想用jsdom能够运行节点js的testing,而不使用业力或浏览器,但其中一个jquery插件内部正在做一个选项(新选项)的实例和使用jsdom我得到的参考错误选项没有从业障定义我不'吨得到任何错误,错误似乎明显业力使用一个真正的浏览器的select是定义和jsdom不是一个真正的浏览器,有什么办法使我的testing工作? 用jsdomdebuggingtesting我发现HTMLOptionElement被附加到由jsdom创build的窗口对象,但也许接口没有完全实现,这就是为什么新的选项不工作。 这是testing文件的代码 if (global.window) { window.jQuery = window.$ = require('jquery'); } else { require('jsdom-global')(); global.jQuery = global.$ = require("jquery"); } var chai = require('chai'); var assert = chai.assert; var expect = chai.expect; var should = chai.should(); chai.use(require('chai-jquery')); chai.use(require('chai-spies')); var sourceFile = require('path_to_js_file'); describe('Test', () => { it('this is not passing', () => […]

unit testingnode.js模拟文件系统打开错误

我想提高我的代码覆盖这个function: function openArchiveFilePath(zipFilepath, next) { var fullyQualifiedZipFilepath = path.resolve(zipFilepath); fs.open(zipFilepath, 'r', openFile); function openFile(err, fd) { if (err) { if (err.code === FS_ERROR_CODE.FILE_NOT_FOUND_ERROR_CODE) { formatErrorMessageAndLog(err, "photo archive file (%s) doesn't exist.", fullyQualifiedZipFilepath); return next(err); } if (err.code === FS_ERROR_CODE.FILE_PERMISSIONS_ERROR_CODE) { formatErrorMessageAndLog(err, "photo archive file (%s) cannot be read, insufficient permissions.", fullyQualifiedZipFilepath); return next(err); } formatErrorMessageAndLog(err, […]

在nodejs中运行mochatesting用例时出现内存不足exception

对于unit testing,我正在使用mocha ,最近在运行testing用例out of memory exception我正在观察out of memory exception — Last few GCs —> 548213 ms: Scavenge 1365.3 (1457.7) -> 1365.3 (1457.7) MB, 1.2 / 0 ms (+ 1.5 ms in 2 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep]. 549442 ms: Mark-sweep 1365.3 (1457.7) -> 1364.3 (1457.7) MB, 1228.6 / 0 ms […]

如何在使用mocha / chai进行unit testing时覆盖护照authentication?

我尝试设置app.request.isAuthenticated = function(){return true;}在另一个答案build议,但这不适合我。 这是在我想要validation的路由上用作中间件的身份validation方法: const authenticate = [passport.authenticate(['bearer'], {session: false}), (req, res, next) => { if (req.isAuthenticated()) { return next(null); } else { return res.status(401).send('Unauthorized'); } }]; 典型的安全调用看起来像这样 router.get('/securedInfo', authenticate, function(req,res,next){ // do stuff }); 我也不想在这个testing中进行身份validation,因为我想单独testing我的RESTful APItesting和我的身份validation逻辑(因为后者很可能随时间而改变)。