Coffeescript中的匿名函数如何测试它

时间:2011-11-23 12:20:23

标签: javascript coffeescript jasmine

我知道Stackoverflow中有很多关于这个问题的讨论,但我无法直截了当地回答这个问题。而且我对coffeescript知之甚少。

基本上,我有这个coffeescript

return42 = -> 42

当我编译时,我得到了这个


(function() {
  var return42;

  return42 = function() {
    return 42;
  };

}).call(this);

所以它包含在匿名函数中的函数并没有暴露给世界。所以当我写这个测试时


describe "Test number", ->
    it "is 42", ->
        expect(return42()).toBe 42

测试失败,因为return42()未定义。我怎么能解决这个问题。

非常感谢你。 : - )

2 个答案:

答案 0 :(得分:1)

您需要一个全局变量作为程序的入口点。您可以通过将函数附加到全局对象而不是将其保留在函数本地来实现。试试这个:

@return42 = -> 42

会给你:

(function() {
  this.return42 = function() {
    return 42;
  };
}).call(this);

如果你只是在浏览器而不是Node.js中运行它,那么附加到window而不是this会更加惯用,即使它们都是全局对象这种情况。

答案 1 :(得分:0)

虽然吉米是对的,但我想补充一点,如果你不需要公开这个功能那么你就不需要测试它了。而是测试使用该功能的公共API。只要您的公共API依赖于您的私有实现,那么如果私有函数也失败,测试应该会失败。