Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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导入单元测试的模块_Javascript_Unit Testing_Qunit - Fatal编程技术网

Javascript 如何使用QUnit导入单元测试的模块

Javascript 如何使用QUnit导入单元测试的模块,javascript,unit-testing,qunit,Javascript,Unit Testing,Qunit,我一直在尝试为一些模块化ES6代码添加单元测试。我的项目结构如下: project └───src | └───js | cumsum.js | index.js <--- entry point └───test tests.js <--- QUnit test code <!DOCTYPE html> <html> <head> <meta charset="utf-8">

我一直在尝试为一些模块化ES6代码添加单元测试。我的项目结构如下:

project
└───src
|   └───js
|           cumsum.js
|       index.js <--- entry point
└───test
        tests.js <--- QUnit test code
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>QUnit Example</title>
  <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
</head>
<body>
  <div id="qunit"></div>
  <div id="qunit-fixture"></div>
  <script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
  <script type="module" src="../src/js/cumsum.js"></script>
  <script type="module" src="tests.js"></script>
</body>
</html>
现在,如果我通过在命令行中运行
qunit
来运行这个示例测试,它将工作:

const A=[1,2,3,4,5];
const expected=[1,3,6,10,15];
QUnit.test( "cumsum", function( assert ) {
    assert.deepEqual([1,3,6,10,15],expected);
});
但是,如果我尝试导入实际的
cumsum
函数,它将无法识别正确的ES6导入语法:

import {cumsum} from '../src/js/cumsum';
const A=[1,2,3,4,5];
const expected=[1,3,6,10,15];
QUnit.test( "cumsum", function( assert ) {
    assert.deepEqual(cumsum(A),expected);
});
我只是得到了错误

SyntaxError:意外标记{


有没有一种方法可以将QUnit与ES6模块一起使用?如果没有,是否有一个单元测试框架可以让我测试这些模块?

以下是我到目前为止的想法

Chrome可以在某种程度上运行ES6模块。它不足以用于web生产,但足以运行一些单元测试。因此在
test
文件夹中,我有
index.html
如下所示:

project
└───src
|   └───js
|           cumsum.js
|       index.js <--- entry point
└───test
        tests.js <--- QUnit test code
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>QUnit Example</title>
  <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
</head>
<body>
  <div id="qunit"></div>
  <div id="qunit-fixture"></div>
  <script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
  <script type="module" src="../src/js/cumsum.js"></script>
  <script type="module" src="tests.js"></script>
</body>
</html>
现在,由于某些原因,您无法在web浏览器中直接打开
test/index.html
,因为尽管Chrome可以在本地愉快地读取普通javascript文件,但如果您设置
type=“module”,它将断开
在本地文件上。相反,我们必须启动web服务器并以这种方式查看。任何开发服务器都可以,因此
webpack dev server
工作正常。打开
http://localhost:8080/test/
在Chrome中,单元测试负载


有人有更好的方法吗?Node.js使用与Chrome相同的javascript引擎,因此理论上我认为应该可以从命令行执行此操作,而无需启动web服务器和打开浏览器。

以下是我到目前为止的想法

Chrome可以在某种程度上运行ES6模块。它不足以用于web生产,但足以运行一些单元测试。因此在
test
文件夹中,我有
index.html
如下所示:

project
└───src
|   └───js
|           cumsum.js
|       index.js <--- entry point
└───test
        tests.js <--- QUnit test code
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>QUnit Example</title>
  <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
</head>
<body>
  <div id="qunit"></div>
  <div id="qunit-fixture"></div>
  <script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
  <script type="module" src="../src/js/cumsum.js"></script>
  <script type="module" src="tests.js"></script>
</body>
</html>
现在,由于某些原因,您无法在web浏览器中直接打开
test/index.html
,因为尽管Chrome可以在本地愉快地读取普通javascript文件,但如果您设置
type=“module”,它将断开
在本地文件上。相反,我们必须启动web服务器并以这种方式查看。任何开发服务器都可以,因此
webpack dev server
工作正常。打开
http://localhost:8080/test/
在Chrome中,单元测试负载


有人有更好的方法吗?Node.js使用与Chrome相同的javascript引擎,因此从理论上讲,我认为应该可以在不启动web服务器和打开浏览器的情况下从命令行执行此操作。

你说得一针见血,这就是Chrome并不真正在本地(完全)支持ES6模块。由于qunit CLI使用无头浏览器,因此它仍然是一个浏览器,并且也不支持ES6模块。你说得一针见血,这就是Chrome并不真正在本地(完全)支持ES6模块。由于qunit CLI使用无头浏览器,它仍然是一个浏览器,并且也不支持ES6模块。