Tag: chai

如何从一个文件夹运行npmtesting?

目前,我正在testing一个React节点应用程序,并将所有testing都放在root / tests文件夹中,并将组件放在与其function相关的单独文件夹中。 我有10多个文件夹和100多个testing,并希望在观看一个文件夹的同时为新组件编写testing。 目前,我正在使用 npm运行testing:看 然而,哪一个工作出色,不仅如此,还有很多开销重新运行了与我的新组件无关的100个其他testing,也很难清除所有的反馈来查看我当前testing的结果。 有没有一个很好的命令只看我的新testing,甚至testing文件的目录?

Chai:AssertionError:期望是一个函数(当testingexception时)

我得到这个错误AssertionError: expected [Function] to be a function当我试图是asynchronous函数是否引发错误 it('has invalid password', async () => { const fakeData = { email: userData.email, password: 'something but not the password!.' } expect(async () => { await authService.authenticate(fakeData) }).to.throw(errors.UnauthenticatedError) }) 结果: AssertionError: expected [Function] to be a function at Assertion.assertThrows (node_modules/chai/lib/chai/core/assertions.js:1273:32) at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/addMethod.js:41:25) at doAsserterAsyncAndAddThen (node_modules/chai-as-promised/lib/chai-as-promised.js:293:29) at Assertion.<anonymous> […]

用Mocha和Chai在JavaScript中testing一个随机数函数

假设我有一个函数返回一个乘以二的数字。 function double(number){ return number * 2; } 用摩卡和柴testing它很容易。 var expect = require("chai").expect; describe("#double", function(){ it("should double a number", function(){ expect(double(2)).to.equal(4); expect(double(4.5)).to.equal(9); expect(double(-3)).to.equal(-6); }); }); 但是现在假设我有一个函数返回两个指定整数之间的随机整数,称它们为min和max 。 function randBetween(min, max){ return Math.floor(Math.random() * (max – min + 1) + min); } 我将无法预测返回的值将等于什么。 我可以编写一个testing,确保返回的值大于或等于min ,小于或等于max ,但实际上并不testing返回的值是否是随机的 。 有一个统计上有效的方法来testing我的randBetween函数是否正常工作吗? PS我知道这个函数不处理无效的参数,例如,如果max小于min 。 请暂时搁置一下。

validation使用Mocha / Chai和asynchronous/等待引发exception

我努力想出一个最好的方法来validation在使用asynchronous/等待的同时在摩卡testing中拒绝承诺。 这是一个should.be.rejectedWith的例子,但我不喜欢should.be.rejectedWith返回一个承诺,需要从testing函数返回,以正确评估。 使用async / await可以删除testing值的这个要求(正如我对下面wins()的结果所做的那样),我觉得在某些时候我很可能会忘记return语句,在这种情况下,testing总是会通过。 // Always succeeds function wins() { return new Promise(function(resolve, reject) { resolve('Winner'); }); } // Always fails with an error function fails() { return new Promise(function(resolve, reject) { reject('Contrived Error'); }); } it('throws an error', async () => { let r = await wins(); r.should.equal('Winner'); return fails().should.be.rejectedWith('Contrived Error'); }); 感觉应该有可能使用async […]

unit testing用Mocha返回承诺的多个asynchronous调用

我想了解如何最好的unit testing我的asynchronousCommonJS模块。 在处理多重链式承诺时,我正在努力理解最佳实践。 让我们假设我有以下模块定义: module.exports = function(api, logger) { return api.get('/foo') .then(res => { return api.post('/bar/' + res.id) }) .then(res => { logger.log(res) }) .catch(err => { logger.error(err) }) } 我有以下spec文件试图testing正确的调用。 var module = require('./module') describe('module()', function() { var api; var logger; var getStub; var postStub; beforeEach(function() { getStub = sinon.stub(); postStub = sinon.stub(); api […]

Zombie.js“断言没有定义”多次访问?

我正在与Zombie.js和Mocha进行集成testing,并遇到了令人困惑的问题,即只有第一个browser.visit()调用似乎成功了。 我的规格是这样的: browser = new Browser site: "http://localhost:101010" describe '/docs', -> ['app', 'server', 'timetable', 'util'].forEach (file) -> describe "/#{file}.html", -> it "documents #{file}.coffee", (done) -> browser.visit "/docs/#{file}.html", -> browser.text('title').should.equal "#{file}.coffee" do done 其中的第一个加载/docs/app.htmltesting没有发生。 但是,所有后续testing都会失败,产生如下的堆栈跟踪: ReferenceError: assert is not defined at Object.HTML5Parser.phases.inBody.startTagBody (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:1828:4) at Object.HTML5Parser.phases.base.processStartTag (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:65:40) at EventEmitter.Parser.do_token (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:2436:21) at EventEmitter.<anonymous> (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:2457:30) at EventEmitter.emit (events.js:117:20) at […]

testingnodejs和声生成器方法

假设你有以下的JSfunction: function YourProxy($orm, $usr) { this.addToDB = function(obj) { /* Do some validation on obj */ return function(callback){ var oo = $orm.createNew(obj); oo.save(options, function(err,ok){ if(err) callback(err); callback(null,ok); } } } } 你可以在node.js上使用ES6生成器来等待这个操作发生,如下所示: function *(){ var yourProxy = new YourProxy(); try { var result = yield yourProxy.addToDB(anObject); } catch(e) { /* Something went wrong sync. Here […]

我怎样才能使Chai.js的例外包括堆栈跟踪信息?

我在节点上使用Chai.js。 行console.log(e)其中e是由Chai.js抛出的exception打印像expected a to be within 0..3一样expected a to be within 0..3 。 我怎样才能使Chai.js的例外包括堆栈跟踪信息?

如何在mocha的mocha.opts文件中添加chaijs的断言?

我不知道这是否可能。 我知道如果我们只使用should.js库,我们可以在mocha.opts文件中进行以下操作 –require should 但是由于chai是父模块, assert是chai子模块,所以在mocha.opts文件中如何使用? 还是我错过了一些非常基本的东西?

testingGraphQL API

我正在testing我的GraphQL API,但我想稍微清理一下。 值得注意的是,我正在使用chai-http作为networking请求。 这是我目前正在做的(哪些工作): let createUser = (()=> { return new Promise((resolve, reject) => { chai.request(server) .post('/api/graphql/') .set('content-type', 'application/json') .send({ 'query' : 'mutation users { \ user : addUser(inputs: { \ firstName: \"Test\", \ lastName: \"User\", \ email: \"test@test.com\", \ }) { \ id, \ firstName \ } \ }' }) .end((err, res) => { […]