如何从ES5测试框架测试ES6生成器功能

时间:2015-03-10 15:35:05

标签: ecmascript-6 traceur

给定具有生成器功能的ES6类,如何从ES5代码运行该生成器函数:

class GeneratorClass {

    constructor() {
        this.ary = [1, 2, 3];
    }

    *[Symbol.iterator]() {
        for (let el of this.ary) {
            yield el;
        }
    }

}

// This runs fine transcompiled (traceur)
var iterableObj = new GeneratorClass();
for (let el of iterableObj) {
    console.log(el);
}

从ES5测试框架:

TestCase('GeneratorClassTest', {
    setUp: function () {
        console.log('in setup');
        var iterableObj = new GeneratorClass();
        for (var el in this.iterableObj) {
            console.log(el);
        }
    },

    testConstructor: function() {

    }  
});

这不会抛出任何错误,会运行setup函数,但不会遍历数组。

1 个答案:

答案 0 :(得分:1)

如果您只需要运行时只支持ES5的ES6模块,则无法执行此操作。

但是如果您使用babeltraceur将ES6模块编译到ES5中然后需要编译模块 - 您可以在ES5运行时测试您的生成器。不要使用for of循环,使用iteratorObj方法创建Symbol.iterator,使用迭代器的when循环和next方法。

对于你的例子:

TestCase('GeneratorClassTest', {
    setUp: function () {
        console.log('in setup');
        var generator = new GeneratorClass();
        var next, iterableObj = generator[Symbol.iterator]();

        while ((next = iterableObj.next()) && !next.done) {
            console.log(next.value);
        }
    },

    testConstructor: function() {

    }
});