为什么业力预处理器没有正确解析CoffeeScript?

时间:2014-05-16 17:43:12

标签: coffeescript karma-runner

我有:

$http
  url: '/api/v1/session/check'
  method: 'POST'
  data: sessionCheck
.success (response) =>
  if response.authenticated is true
    @user = response.user

  deferred.resolve response
.error (data, status, headers, config) ->
  deferred.reject data
  throw {
    data: data
    status: status
    headers: headers
    config: config
  }

在我的karma.conf.coffee中,我有:

preprocessors:
  'public/scripts/**/*.coffee': ['coverage']
  'test/webapp/unit/**/*.coffee': ['coffee']

singleRun: true


reporters: ['story', 'coverage']

coverageReporter:
  type: 'html'
  dir: 'test/webapp/coverage/'

但是当我运行测试时,我收到错误消息:

ERROR [preprocessor.coverage]: Syntax error on line 59, column 8: unexpected '.' (\u002E)
56 :           url: '/api/v1/session/check'
57 :           method: 'POST'
58 :           data: sessionCheck
59 :         .success (response) =>
^^ :~~~~~~~~^
60 :           if response.authenticated is true
61 :             @user = response.user
62 :

当然,这对我来说毫无意义。因为如果我将代码更改为:

$http(
  url: '/api/v1/session/check'
  method: 'POST'
  data: sessionCheck
).success((response) =>
  if response.authenticated is true
    @user = response.user

  deferred.resolve response
).error((data, status, headers, config) ->
  deferred.reject data
  throw {
    data: data
    status: status
    headers: headers
    config: config
  }
)

然后它工作正常。这两个CoffeeScript片段编译为相同的 JavaScript,那么是什么给出了什么?

1 个答案:

答案 0 :(得分:1)

您使用的是最新的业力咖啡预处理器吗? 看起来你的业力预处理器使用过时版本的coffeescript(< 1.7)。 没有括号的方法链接仅在1.7中添加,不久前就出现了。