This commit is contained in:
harttle
2018-07-16 15:02:31 +08:00
parent d0fb5ccece
commit 02806b2257
2 changed files with 20 additions and 12 deletions
+8 -6
View File
@@ -56,15 +56,17 @@ var Scope = {
} }
var key = paths.shift() var key = paths.shift()
var value = getValueFromScopes(key, scopes) var value = getValueFromScopes(key, scopes)
return paths.reduce(
(value, key) => {
if (_.isNil(value)) { if (_.isNil(value)) {
throw new TypeError('undefined variable: ' + key) throw new TypeError('undefined variable: ' + key)
} }
return getValueFromParent(key, value) while (paths.length) {
}, key = paths.shift()
value value = getValueFromParent(key, value)
) if (_.isNil(value)) {
throw new TypeError('undefined variable: ' + key)
}
}
return value
}, },
/* /*
+9 -3
View File
@@ -151,12 +151,18 @@ describe('scope', function () {
} }
expect(fn).to.throw(/undefined variable: notdefined/) expect(fn).to.throw(/undefined variable: notdefined/)
}) })
it('should throw when deep variable not exist', function () { it('should throw when parent not defined', function () {
scope.set('foo', 'bar')
function fn () { function fn () {
scope.get('foo.bar.not.defined') scope.get('foo.bar.not.defined')
} }
expect(fn).to.throw(/undefined variable: not/) expect(fn).to.throw(/undefined variable: bar/)
})
it('should throw when itself not defined', function () {
scope.set('foo', 'bar')
function fn () {
scope.get('foo.BAR')
}
expect(fn).to.throw(/undefined variable: BAR/)
}) })
it('should find variable in parent scope', function () { it('should find variable in parent scope', function () {
scope.set('foo', 'foo') scope.set('foo', 'foo')