Articles of 摩卡

使用asyncjs保存多个Mongoose对象不起作用

我想在我的摩卡testing中保存两个Mongoose对象,并在两者都成功时得到通知。 我正在使用asyncjs库来实现这一点。 beforeEach (done) -> obj1 = new Person({ name: 'Jon' }) obj2 = new Person({ name: 'Dan' }) console.log obj1 # … { name: 'Jon', _id: 4534534543512 } async.list([ obj1.save obj2.save ]).call().end( (err, res) -> return done(err) if err done() ) 你可以看到,在console.log中obj1被设置为一个MongoDB文件 – 但是当我想要使用save函数将它们保存到数据库中时,在执行此操作时出现以下错误: TypeError: Cannot read property 'save' of undefined 如果我用asyncreplaceasync.list中的两个函数 console.log console.log […]

无法在节点js上使用摩卡运行PhantomJS

我试图用这些参数运行phantomjs: mocha-phantomjs -s disk-cache=no –ignore-leaks -R xunit tests/index.html 但总是得到这个回应: events.js:72 throw er; // Unhandled 'error' event ^ Error: spawn ENOENT at errnoException (child_process.js:980:11) at Process.ChildProcess._handle.onexit (child_process.js:771:34) 我使用的是Ubuntu 13,mocha-phantomjs 3.1.0和v0.10.15。 任何谷歌search没有帮助,我只是不知道该怎么办。 所有我以前做的,只是安装节点和mocha-phantomjs 谁能帮我?

来自浏览器的Node.js和Mochatesting

这可能是一个非常愚蠢的问题,但我不确定。 如果我有一个node.js应用程序和大量的用Mocha构build的testing,我可以在我的服务器上使用mocha运行它们。 但是,有没有办法通过浏览器调用unit testing,并将结果传递给页面? 对于开发,我想在我的网站上有一个显示testing结果的页面。 每当我search如何做到这一点,它正在testing我发现的实际的浏览器代码(dom,UI等),但实际上我只是想看到运行在服务器端的testing结果,浏览器! 提前致谢!

通过摩卡将parameter passing给程序

我刚开始使用摩卡来testing我的网站。 我的testing运行者期待一些命令行参数。 当我跑步 mocha mytest.js arg1 arg2 所有的参数,以摩卡,而不是我的mytest脚本。 有没有办法把它们一起转发?

摩卡单位testing返回0作为未捕获的exception退出代码

我有我的当前应用程序的testing套件。 有时我会引入一个错误,并导致一个未被捕获的exception被抛出。 手动运行unit testing时,可以看到错误。 但是,当我将它与我们的CI系统集成时,该过程仍然返回0,就好像一切正​​常。 由于这个正面的退出码,我们无法检测到错误。 我究竟做错了什么?

摩卡testing在失败时执行两次callback

我有一个简单的Mongoose模式,我正在用Mochatesting; 当我用'成功'callback运行testing它正常执行,但是当最后一个testing执行失败,似乎再次运行testing(我得到两个结论,一个填充错误对象和第二个返回null在错误对象)。运行下面的两个testing会导致以下输出: Cabinet: â should return all authorized â should return not authorized <– it succeeds the first time? 1) should return not authorized 2 passing (42ms) 1 failing <— what? there are only two tests 1) Cabinet: should return not authorized : Uncaught AssertionError: expected null to exist <— see test 这个testing重复 it("should return […]

unit testingnodejs事件

我正在使用本答案中解释的解决scheme来解释我的节点应用程序中的unit testing事件。 但是,setTimeout函数永远不会调用,所以我的testing通过时,他们应该失败。 这里是一个例子: suite('myTests', function() { test('myFunction_whenCalled_emitsEvent', function() { var myClass = new MyClass(); var eventTimeout = setTimeout(function() { assert(false); }, 1000); myClass.on('something', function() { clearTimeout(eventTimeout); }); myClass.doSomething(); // this does not emit the 'something' event }); }); 我预计这会失败,1秒钟后,只要事情没有发生。 我在assert(false)行放置了一个断点,它从来没有被打中。 有人能指出我正确的方向吗? 谢谢。

我怎样才能伪造全球背景来隔离testing?

我的unit testing运行在node.js中(使用mocha,chai和sinon)。 我正在testing的代码是为了在浏览器中运行。 一些代码定义全局的东西,而其他代码期望有一个window对象,并将对象添加到window 。 (具体来说,我使用一个垫片来模拟ES6的Promise对象。)到目前为止,我通过添加global.window = global;伪装窗口对象global.window = global; 到目前为止只能得到我 当我想拆除我的假环境下一组testing时,问题就出现了。 我已经尝试在before()或beforeEach()函数中执行我的require()调用,并试图手动删除after()或afterEach()函数中创build的对象。 两件事中的一件发生在每次。 全局对象从一个testingJS文件持续到下一个,或者全局对象在所有的testing中都是神秘的。 我不确定这是否与摩卡运行testingJS文件或require()如何工作的方式有关,但我没有想法。 以前有人解决过这个问题吗?

testing状态码以外的响应标题字段时遇到困难

我正在使用Express框架。 其任务是从数据库中检索一个集合,并将自定义的消息插入到返回给客户端的响应头文件中(下面显示的Node.js代码工作正常,我可以在返回的头文件中看到我的自定义消息): if (req.accepts('json')) { **res.header('Warning', 'my_customized_message');** res.header('Content-Type', 'application/json'); res.send(res.locals.items, 200); } 现在,我尝试使用“mocha”来使用MOCHA对新添加的代码进行unit testing: request = require('request'); should = require('should'); describe('GET /core/dbq/534e930204dd311822ec1c9d', function() { this.timeout(15000); it ('Check header message', function(done) { request.get('http://localhost:3001/ecrud/v1/core/dbq/534e930204dd311822ec1c9d', function(err, response, header) { response.statusCode.should.equal(200); response.warning.should.equal('my_customized_message'); // Uncaught TypeError: Cannot read property 'should' of undefined done(); } ) } ) } ) 如果我只testingresponse.statusCode,没有问题。 […]

Superagent res.text是未定义的

我正在尝试使用Mocha和SuperAgent的TDD方法,但是当SuperAgent的res.text以某种方式未定义的时候卡住了。 testing: it('should return 2 given the url /add/1/1', function(done) { request .get('/add/1/1') .end(function(res) { res.text.should.equal('the sum is 2'); done(); }); }); 码: router.get('/add/:first/:second', function(req, res) { var sum = req.params.first + req.params.second; res.send(200, 'the sum is ' + sum); });