beforeEach ブロックを使用する coffeescript でジャスミン テストを作成しようとしています。これは、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'})
scope
ただし、 andが最も内側のスコープで$browser
宣言されるため、これは機能しません。var
つまり、ブロック内で 1 回、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 で書くことはできますか?