Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript qunit和jquery的未捕获异常_Javascript_Jquery_Node.js_Unit Testing_Qunit - Fatal编程技术网

Javascript qunit和jquery的未捕获异常

Javascript qunit和jquery的未捕获异常,javascript,jquery,node.js,unit-testing,qunit,Javascript,Jquery,Node.js,Unit Testing,Qunit,我在尝试使用qunit在命令行上运行javascript单元测试时遇到了一个问题 下面是一些重现错误的示例代码: 文件util.js: function abc() { return 'abc'; } if (typeof module !== 'undefined' && module.exports) { module.exports = { abc: abc }; } 文件util tests.js var qunit = req

我在尝试使用qunit在命令行上运行javascript单元测试时遇到了一个问题

下面是一些重现错误的示例代码:

文件util.js

function abc() {
    return 'abc';
}

if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        abc: abc
    };
}
文件util tests.js

var qunit = require("qunit");

test("Test abc function", function () {
         equal(util.abc(), 'abc');
});
有了这些文件,我可以使用以下命令运行测试(在shell中提供类似于表的输出以及测试结果):

现在,如果我将以下内容添加到util.js,它将中断

$(document).ready(function () {
    /* some code here */
});
以下是错误输出:

qunit -c util:util.js -t util-tests.js

Testing /home/mfrere/jstst/util.js ... [Error: Uncaught exception in child process.]
同样的问题:

var a = $;
或:

因此,我认为我需要以某种方式导入jQuery,因此我考虑将jQuery.js作为依赖项添加到命令中,如下所示:

qunit -c util:util.js -t util-tests.js -d jquery.js
上面的命令给出了相同的“uncaughtexception”错误,即使util.js不包含对“$”的任何引用

我可能还需要做一些其他的事情来让qunit识别“文档”,但我不知道是什么或如何识别

现在我的问题是:我该怎么做才能让它发挥作用?请记住,我想在命令行而不是浏览器中测试文件,这一点很重要

以防我在安装过程中出错,我就是这样安装node/qunit的(在ubuntu下):

在.bashrc中,我添加了以下行:

source ~/.nvm/nvm.sh
选择了节点的特定版本

nvm install v0.9.2
nvm alias default 0.9
并安装了qunit

npm install -g qunit
最后,我还必须在.bashrc中添加以下内容:

export NODE_PATH=~/.nvm/v0.9.2/lib/node_modules

您尚未导入jQuery:


$=require('jquery'),
jQuery=require('jQuery');


如果您正在使用browserify,请将其更改为“jquery browserify”。

好的,这就是我所做的:
npm install-g jquery
在命令行,然后我尝试将您的代码添加到测试代码中,但没有成功(仍然是未捕获的错误…)。但是,如果我将
$=require('jquery')
添加到生产代码中,并避免使用
$(document).ready()
$(function(){})相反,我的测试确实有效。但是我不能使用这个解决方案,因为1)它修改了生产代码。2) 它在生产代码中重新定义了$。我尝试在一个单独的文件中写入该行,并使用“-d”选项添加它,但在
util.js
?无论你在哪里引用
$
,你都需要它。是的,Eric,这就是我所说的生产代码。我不能这样做,因为$将与我使用npm(jquery 1.8.3)获得的jquery包一起重新分配,而不是我在生产服务器(jquery 1.9.1)上安装的jquery包。另外,我不喜欢在生产代码中添加任何与测试相关的代码。谢谢你最初的回答,它帮助我更好地理解这个问题。如果在接下来的几天里没有答案,我可能不得不切换到基于浏览器的测试。我倒不想,但这似乎会让我对测试本身有更多的控制。事实上,我认为切换到基于浏览器的测试是一个非常好的主意。我使用
grunt-saucelabs
grunt任务在真实浏览器中测试所有浏览器代码(实际上一次测试了很多)。见和。额外好处-您可以在浏览器环境中看到通过(或失败)浏览器测试的录制视频,甚至可以测试移动浏览器。Node很好,但不是对所有问题都适用。我会接受这个答案,因为没有人能给我更好的答案。谢谢你,埃里克。
nvm install v0.9.2
nvm alias default 0.9
npm install -g qunit
export NODE_PATH=~/.nvm/v0.9.2/lib/node_modules