Как мне объявить переменную в определенной области в coffeescript?

Я пытаюсь написать тест на жасмин в coffeescript, который использует блок beforeEach. Это приводит к проблеме с областью видимости переменных coffeescript. Вот что я хотел бы написать:

describe 'PhoneDetailCtrl', () ->
  beforeEach () ->
    scope = angular.scope()
    $browser = scope.$service('$browser')

  it 'should fetch phone detail', () ->
    scope.params = {phoneId:'xyz'}
    $browser.xhr.expectGET('phones/xyz.json').respond({name:'phone xyz'})
    ctrl = scope.$new(PhoneDetailCtrl)

    expect(ctrl.phone).toEqualData({})
    $browser.xhr.flush()

    expect(ctrl.phone).toEqualData({name:'phone xyz'})

Однако это не работает, потому что область и $ browser будут объявлены с var в сокровенная сфера. То есть один раз в блоке beforeEach , а затем еще раз в блоке it . Я могу принудительно объявить переменные в правильной области, инициализировав их, но это кажется очень странным:

describe 'PhoneDetailCtrl', () ->
  $browser = {}
  scope = {}
  beforeEach () ->
    scope = angular.scope()
    $browser = scope.$service('$browser')

  it 'should fetch phone detail', () ->
    scope.params = {phoneId:'xyz'}
    ...

Это работает, но javascript, в который он компилируется, на самом деле

describe('PhoneListCtrl', function() {
  var $browser, ctrl, scope;
  $browser = {};
  ctrl = {};
  scope = {};

, где все, что мне нужно, это строка var $ browser, ctrl, scope; . Могу я написать это более кратко в coffeescript?

38
задан Kevin Peterson 4 November 2011 в 06:11
поделиться