Como declarar uma variável em um escopo específico no coffeescript?
Estou tentando escrever um teste de jasmim no coffeescript que usa um bloco beforeEach. Isso tem um problema com o escopo da variável do coffeescript. Aqui está o que eu gostaria de escrever:
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'})
Isso não funciona, porque oscope
e$browser
será declarado comvar
no escopo mais interno. Ou seja, uma vez nobeforeEach
e, novamente, noit
quadra. Posso forçar as variáveis a serem declaradas no escopo correto, inicializando-as, mas isso parece muito estranho:
describe 'PhoneDetailCtrl', () ->
$browser = {}
scope = {}
beforeEach () ->
scope = angular.scope()
$browser = scope.$service('$browser')
it 'should fetch phone detail', () ->
scope.params = {phoneId:'xyz'}
...
Isso funciona, mas o javascript para o qual ele compila é realmente
describe('PhoneListCtrl', function() {
var $browser, ctrl, scope;
$browser = {};
ctrl = {};
scope = {};
onde tudo que eu preciso é a linhavar $browser, ctrl, scope;
. Posso escrever isso de forma mais concisa em coffeescript?