Javascript ES6单元测试-导入和导出模块

Javascript ES6单元测试-导入和导出模块,javascript,unit-testing,ecmascript-6,karma-jasmine,babeljs,Javascript,Unit Testing,Ecmascript 6,Karma Jasmine,Babeljs,我刚刚制定了建立ES6测试系统的计划,主要是使用package.json中的以下依赖项: "devDependencies": { "babel-core": "^5.8.24", "babel-loader": "^5.3.2", "jasmine": "^2.3.2", "jasmine-core": "^2.3.4", "karma": "^0.13.9", "karma-jasmine": "^0.3.6", "karma-jasm

我刚刚制定了建立ES6测试系统的计划,主要是使用package.json中的以下依赖项:

"devDependencies": {
    "babel-core": "^5.8.24",
    "babel-loader": "^5.3.2",
    "jasmine": "^2.3.2",
    "jasmine-core": "^2.3.4",
    "karma": "^0.13.9",
    "karma-jasmine": "^0.3.6",
    "karma-jasmine-html-reporter-livereload": "^1.0.0",
    "karma-phantomjs-launcher": "^0.2.1",
    "karma-webpack": "^1.7.0",
    "phantomjs": "^1.9.18",
    "webpack": "^1.12.1"
}
现在,要在ES6中运行测试,我需要从客户机文件导出类,例如:

export class Calculator{

    add(op1,op2){
        return op1 + op2;
    }
    subtract(op1,op2){
        return op1 - op2;
    }
}
然后我需要在测试文件中导入它:

import {Calculator} from './es6-testing';
describe('Calculator', () => {
   it('should add two numbers', () => {
       let calculator = new Calculator();
       let sum = calculator.add(1,4);
       expect(sum).toBe(5);
   });
    it('should subtract two numbers', () => {
        let calculator = new Calculator();
        let sum = calculator.subtract(4,1);
        expect(sum).toBe(3);
    });
});

我很难理解为什么在这种情况下,通常需要进口和出口。有没有办法解决这个问题,例如自动导入和导出模块而不指定它们?任何事情都必须使用导入和导出,这似乎很容易成为工作流的障碍。我遗漏了什么?

ES6模块允许您保持代码隔离。通过不将类
计算器
放在全局范围内,您可以在其他地方引用另一个名为
计算器
的类。如果您正在使用模块,则没有一种很好的方法可以自动导入类,因为您需要定义所引用的文件。

是否使用模块?听起来你更喜欢全局文件,否则,你如何指定要使用的模块?@Juan Mendes我想使用全局文件,而不必导入或导出,但我不知道如何在测试文件和客户端文件之间链接。我强烈建议在全局文件上使用模块。模块不应该妨碍您的工作流程-它们应该是您工作流程的一部分。另一种选择是在不使用模块的情况下压缩文件(并有选择地缩小),但这对我来说是个坏主意。@dvlsg@Juan Mendes这是ES6测试的标准做法吗?从现在起,一切都应该在
类中
?不一定。您可以导入/导出的不仅仅是类。例如,
export default function(){/*…*/}
是非常有效的语法,在另一个文件中,您可以使用export.js从./file\u导入someFunc。您可以对任何变量执行相同的操作。如果您想进行单元测试,我会将其导出,这样不仅可以将其导入测试套件,还可以将其导入主代码库。