使用带有ES5代码的ES6类

时间:2016-11-08 14:28:08

标签: javascript node.js ecmascript-6 mocha

我终于乘坐ES6列车了。我用ES6和Babel编写了一个小的Node.js应用程序进行编译。我正在使用Mocha编写测试,据我所知,你不应该使用ES6。

我正在尝试测试我所创建的对象类的一些函数。所以在摩卡我正在做以下事情:

var assert = require('assert');
var Icon = require('../lib/icon');

describe('Icons', function() {
  describe('#save()', function() {
    it('should return a success message & save the icon', function() {
        var icon = new Icon('https://cdn4.iconfinder.com/data/icons/social-media-2070/140/_whatsapp-128.png', 'icon-test');
        var result = Icon.save();

        if(result !== '_whatsapp-128.png saved successfully.') return false;

        return fs.existsSync('icon-test/_whatsapp-128.png');
    });
  });
});

由于这条线明显无效:

var icon = new Icon('https://cdn4.iconfinder.com/data/icons/social-media-2070/140/_whatsapp-128.png', 'icon-test');

我不太确定如何使用ES5实例化ES6对象然后测试该函数。任何帮助将不胜感激。

**编辑 - 添加图标文件**

import fs from 'fs';
import https from 'https';
import path from 'path';

class Icon {
    constructor(source, destination) {
        this.source = source;
        this.destination = path.resolve(destination);
    }

    save() {
        console.log(this.source);
        // Fetching the icon.
        let request = https.get(this.source, (response) => {

            // Splitting the file information.
            let fileInfo = path.parse(this.source);

            // Creating the directory, if it does not already exist.
            if(!fs.existsSync(this.destination)) {
                fs.mkdirSync(this.destination);
                console.log('Destination directory created.\n');
            }

            // Piping the icon data & saving onto disk.
            let iconFile = fs.createWriteStream(this.destination + '/' + fileInfo.base);
            response.pipe(iconFile);
            return `${fileInfo.base} saved successfully.`;
        });
    }
}

export default Icon;

2 个答案:

答案 0 :(得分:1)

../lib/icon是具有默认导出的ES6模块。

require('../lib/icon')返回ES6模块对象。要求默认导出,它应该是

var Icon = require('../lib/icon').default;

答案 1 :(得分:-1)

使用es6-shim或es5-shim(请参阅此处https://github.com/paulmillr/es6-shim)以使其在ECMA Script 5中运行。如果不能使用它,请包含其他库以获得遗留支持,如您所见这里https://github.com/es-shims用于填充和其他所有东西。

希望有所帮助。