Articles of 单元

Hapi.js内容谈判

我想在我的hapi路由中进行内容协商,以便返回客户可以接受的数据types。 快递,我会做这样的事情 res.format({ "text/plain": function(){ res.send("Text Response"); }, "text/html": function(){ res.send("HTML Response"); }, "application/json": function(){ res.json({ message: "JSON Response" }); }, "default": function() { // log the request and respond with 406 res.status(406).send("Not Acceptable"); } }); 是否有内置的方式来做到这一点与hapi? 我浏览了API文档 ,没有看到任何东西。 我坚持滚动我自己的解决scheme?

HapiJS代理故障

TL; DR 如何拦截一个请求,为一个ID ping不同的路由,将ID存储在一个会话中,然后使用刚刚得到的ID继续原始请求(特别是带有有效载荷的PUT / POST)? 背景 我正在使用HapiJS(8)将来自客户端的请求代理到现有的API(我无法控制进程/逻辑)。 API要求每个请求在查询string或有效负载中包含“会话ID”(取决于http方法)。 为了获得一个会话ID,我所要做的就是要求一个…没有用户名/密码要求(它使用标题中的基本身份validation)。 会话ID如果不更新,则每24小时过期一次。 每个客户都有自己的会话ID。 我目前正在使用hapi-auth-cookie来存储会话ID的值,当需要ID时会被查询。 如果ID过期或为空,我需要请求一个新的客户端的请求才能成功地代理到API。 当前解决scheme 当客户端的请求方法是'GET'时,我正在使用hapi-auth-cookie文档中描述的appendNextconfiguration来非常优雅地处理这个挑战。 这个请求被hapi-auth-cookie拦截,如果需要一个新的会话ID,请求被发送到那个特定的路由来获取它,API返回然后​​分配给Hapi会话的ID,然后(使用Wreck ) reply.redirect返回到完成的原始GET请求。 无缝和优雅。 但是,我不知道如何用不同的包含数据有效载荷的http方法来完成同样的stream程。 除了reply.redirect之外,还有什么能够完成同样的目标,同时保持原始的有效载荷和方法? 还是有更好的方法来做到这一点? 代码(目前适用于“GET”请求的代码) 主要应用程序文件(hapi-auth-cookieconfiguration) # register plugins server.register require('./plugins') , (err) -> throw err if err # set authentication (NLS) configs server.auth.strategy 'session', 'cookie', password: 'session_pwd' cookie: 'ghsid' redirectTo: '/api/SessionID' #get new session ID […]

Node.js sinon在并行执行中桩存函数导致失败的testing

我有两个testing用例testing相同的function只是采取两个不同的执行path,所以说明: MyClass.prototype.functionBeingTested = function() { if (this.check1()) { this.isCheck1Called = true; } else if (this.check2()) { this.isCheck1Called = false; } else { … } }; 我的2个testing用例如下: it('should take check1() execution path', function() { var myClass= new MyClass({}, {}, {}); var check1Stub sinon.stub(MyClass.prototype, 'check1'); check1Stub.returns(true); myClass.functionBeingTested(); myClass.isCheck1Called.should.equal(true); }); it('should take check2() execution path', function() { var […]

unit testing查询数据库的方法

所以我创build了一个接受ID的函数,通过数据库从数据库内部查询数据库,根据不同的场景返回数据,然后我们返回数据。 我将如何unit testing这个function? 我会存根据我的存储库层查找方法返回数据,所以我不依赖于连接数据库?

将自定义login表单添加到hapi-auth-basic

我使用hapi-auth-basic来authentication用户。 我的问题是如何添加自定义login表单,而不是使用浏览器的基本forms。

摩卡没有显示所有的testing

我有一些摩卡unit testing,当我运行这些只有2/3的testing显示。 我正在使用斑点记者,并通过运行我的testing。 这是我的makefile: REPORTER = list TESTS = test/*.js test/**/*.js test/**/**/*.js REQUIRE = should test: @NODE_ENV=test NODE_PATH=./app/controllers ./node_modules/.bin/mocha \ –reporter $(REPORTER) \ –ui tdd \ –require $(REQUIRE) \ -G \ $(TESTS) test-ci: @NODE_ENV=ci NODE_PATH=./app/controllers ./node_modules/.bin/mocha \ –reporter $(REPORTER) \ –ui tdd \ –require $(REQUIRE) \ $(TESTS) start: NODE_PATH=./app/controllers NODE_ENV=development nodemon server.js .PHONY: test 和test/test.js […]

如何从Web框架中分离业务逻辑进行testing?

为了testingWeb应用程序,许多来源build议尽可能使您的业务逻辑免受Web框架的影响,以便可以在无需使用Web框架的情况下进行testing。 如何才能做到这一点? 如果我有一个注册页面,我需要validationHTTP POST数据(例如,确保出生date是一个date和必填字段给出),那么我需要将validation的数据持久化到数据库。 我不确定如何将与Web框架相关的部分从业务逻辑中分离出来,因为这是相当简单的function。 同样适用于login页面,帐户删除页面等 我认为web框架除了将HTTP数据传递给业务逻辑function之外,并不会做太多的工作,而业务逻辑function则会完成Web框架function在重构之前所做的一切(validation,持久化)。 所以我没有看到我正在获得什么。 例如它会变成 businessLogicRegister( request.data['email'], request.data['birthday'], request.data['username'] ); 有人可以举一些例子,例如像Express或Koa这样的基本的Node JS框架中的注册/login等基本function,以及将业务逻辑与Web框架分开的好方法吗? 以及这将如何帮助使代码更加unit testing?

伊斯坦布尔封面testing挂起,然后在60秒后中止

我正在使用伊斯坦布尔代码覆盖我创build的Web应用程序。 每当我运行npm run cover –color=always (运行: ../node_modules/babel-cli/bin/babel-node.js — node_modules/.bin/babel- istanbul cover test/index.js –report=cobertura –print=detail –x=dist/** ) 但terminal上没有任何东西出现在大约60秒后,当我得到这个错误: TAP version 13 # application server Aborted (core dumped) 但是,如果我在index.js文件的底部写了一些导致错误的东西(比如一个未定义的函数),它将会打印覆盖范围以及错误。 有什么想法可能是错的?

对所有testing子文件夹运行实验室testing

我在我的公司重构了一个后端,我尽可能地模块化了它。 我的结构可以被定义为由几个本地子模块和一个或两个主要模块(子模块)组成的monorepo。 我们来说明一下: 根 主要 的package.json 使用子模块的东西 使用子模块B的东西 testing 模块 submoduleA 的package.json 码 testing submoduleB 的package.json testing 正如你所看到的,每个模块都有它自己的testing, package.json和依赖关系。 一切工作完美无缺(例如,在模块的文件夹中运行npm test )。 我正在使用lab和code进行testing。 我想要做的就是去项目的根目录,运行npm test并运行所有子模块和主模块的所有testing。 基本上一次运行任何testing文件夹下的所有testing。 到目前为止,我发现的问题是: – 目前只有目标testing目录下的文件正在运行。 我甚至不知道如何一次运行所有的testing。 我的命令看起来像lab src/main/test –reporter console –threshold 100 –assert code 我现在正在做的是把所有的testing都放在同一个testing目录下,并对所有的东西做出相应的要求。 这是非常不方便的,因为使所有的testing脆弱../../../some/away/path要求和东西。 任何关于保持代码模块化的build议,并且能够一次运行所有的testing将是非常受欢迎的。 非常感谢你。 我一个星期前就问过hapijs知识库,所以如果你想回答的话也可以: https : //github.com/hapijs/discuss/issues/397

用mochatestingnode.js – Newbie

我已经开始在我的JS项目中实现TDD。 我为此目的实施了摩卡。 由于这些是我所做的第一步: 安装了node.js 为我的项目在全球和本地安装了摩卡。 写了package.json设置依赖关系。 写了makefile。 写了.gitignore以避免上传node_modules文件夹。 文件夹结构 项目 – js —- filetotest.js – test —- test.js 我想要做的就是运行命令make test,以便在testingfiletotest.js文件的test.js中运行testing。 我读了关于使用导出的node.js方法。 但有没有办法将文件包含在testing套件中? 我被困在这里,我认为我的怀疑更多是关于概念而不是科技的东西。 会很感激你的帮助。 澄清一下我想做什么: https : //nicolas.perriault.net/code/2013/testing-frontend-javascript-code-using-mocha-chai-and-sinon/ 我想通过命令行得到类似的结果。 非常感谢, 吉列尔莫