如何在咖啡脚本的特定范围内声明变量?
Posted
技术标签:
【中文标题】如何在咖啡脚本的特定范围内声明变量?【英文标题】:How do I declare a variable in a specific scope in coffeescript? 【发布时间】:2011-12-21 18:34:43 【问题描述】:我正在尝试在使用 beforeEach 块的咖啡脚本中编写茉莉花测试。这遇到了咖啡脚本的变量范围问题。以下是我想写的:
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
和$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中更简洁地写这个吗?
【问题讨论】:
我认为将初始化程序保持在顶部这样很好。 【参考方案1】:你做对了。
这在CoffeeScript documentation 中有描述。我不会担心它创建的 JS。是的,如果您自己编写它会有点混乱,但是当您使用像 CoffeeScript 这样的重写器时,这是您必须忍受的事情之一。
不过,您确实有几个不错的选择。
如果你愿意,你可以将变量放在当前上下文中(这恰好是你的 jasmine.Spec 对象,所以它是一个相对安全和合适的地方放置变量......只是不要覆盖existing vars in the context.):
describe 'PhoneDetailCtrl', () ->
beforeEach () ->
@scope = angular.scope()
@$browser = @scope.$service('$browser')
it 'should fetch phone detail', () ->
@scope.params = phoneId:'xyz'
#... etc
您还可以设置自己的变量来存储东西
describe 'PhoneDetailCtrl', () ->
setup =
beforeEach () ->
setup.scope = angular.scope()
setup.$browser = setup.scope.$service('$browser')
it 'should fetch phone detail', () ->
setup.scope.params = phoneId:'xyz'
#... etc
【讨论】:
【参考方案2】:你的测试可以这样写:
describe "MyGame", ->
mygame = null
beforeEach inject (_MyGame_) ->
mygame = _MyGame_
it "should have two players", ->
expect(mygame.opponents.length).toEqual 2
更简洁的语法 - 无需全局化。
【讨论】:
您也可以使用a = b = c = d = null
作为备用线路。这些变量不会相互影响(与将它们分配给
不同)
你的链接失效了。我不确定它现在是否/在哪里,或者我建议进行编辑。以上是关于如何在咖啡脚本的特定范围内声明变量?的主要内容,如果未能解决你的问题,请参考以下文章