ReferenceError:未定义SomeName(在Haxe中公开类)

时间:2014-07-24 05:22:09

标签: javascript coffeescript tdd mocha haxe

我是Haxe的初学者。我尝试做 FizzBu​​zz TDD 。我使用 Mocha expect.js 。 我通过@:expose("SomeName")公开了Haxe类,以便能够从测试中看到。

但是,测试找不到FizzBu​​zz类。

FizzBu​​zz.hx

package ;

@:expose("SomeName")
class FizzBuzz{

    public function new() {

    }

    public function put(n : Int) : String {
        if (n == 3) {
            return "Fizz";
        }
        else {
            return Std.string(n);
        }
    }
}

Main.hx

package ;

import js.Lib;

class Main {

    static function main() {
        var f = new FizzBuzz();
        for (i in 1...100) {
            f.put(i);
        }

    }

}

fizzbuzz.js

(function ($hx_exports) { "use strict";
var FizzBuzz = $hx_exports.SomeName = function() {
};
FizzBuzz.prototype = {
    put: function(n) {
        if(n == 3) return "Fizz"; else if(n == null) return "null"; else return "" + n;
    }
};
var Main = function() { };
Main.main = function() {
    var f = new FizzBuzz();
    var _g = 1;
    while(_g < 100) {
        var i = _g++;
        f.put(i);
    }
};
Main.main();
})(typeof window != "undefined" ? window : exports);

fizzbuzztest.coffee

expect = require 'expect.js'
fizzbuzz   = require '../bin/fizzbuzz.js'

describe 'fizzbuzz', ->
    it 'put Fizz when 3 is given', ->
        f = new SomeName()
        result = f.put(3)
        expect(result).to.be(3)

错误消息

fizzbuzz put Fizz when 3 is given
    ✘ failed
        ReferenceError: SomeName is not defined

如何从测试代码中找到FizzBu​​zz类?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

fizzbuzz = require '../bin/fizzbuzz.js'

SomeName已导出到您的导出,因此它当前位于fizzbuzz.SomeName,当然没有名为SomeName的变量(因此它告诉您)。

实际上,你的问题与haxe无关,你只是写了不正确的coffeescript代码,它也不适用于任何原生的js模块。