【发布时间】: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中更简洁地写这个吗?
【问题讨论】:
-
我认为将初始化程序保持在顶部这样很好。
标签: coffeescript jasmine