【发布时间】:2015-10-24 18:56:00
【问题描述】:
下面是从循环中运行一系列测试的代码。它产生了一些意想不到的行为。似乎第一个操作中的args 的范围正在泄漏到第二个操作中。换句话说,由于某种原因,callback 存在于第二个操作的 args 中。
describe("symlinkType", function() {
tests.success.forEach(function (test) {
var args = test[0]
var expectedType = test[1]
var should = util.format('should return \'%s\' when src \'%s\'', expectedType, args[0])
it(should, function (done) {
var callback = function (err, type) {
if(err) done(err)
expect(type).to.equal(expectedType)
done()
}
args.push(callback)
return symlinkType.apply(null, args)
})
})
})
describe("symlinkTypeSync", function() {
tests.success.forEach(function (test) {
var args = test[0]
var expectedType = test[1]
var should = util.format('should return \'%s\' when src \'%s\'', expectedType, args[0])
it(should, function () {
var value = symlinkTypeSync.apply(null, args)
expect(value).to.equal(expectedType)
})
})
})
我想知道这种行为的原因以及如何解决它。我习惯于当你声明一个变量时,它会改变变量的值,随后的.push() 调用不应该影响第二个语句中的args 变量。这是 mocha 的错吗,it 语句是否泄露了作用域?
【问题讨论】:
-
您能发布一些示例
args值吗?它的初始值是多少?第一次推送后的价值是多少?第二推?在所有测试结束时? -
var args=test[0]只是对test[0]的引用。未创建新对象。如果出于某种原因test[0]指向所有tests内存中的同一个对象,那么args的范围实际上并没有多大意义。因为每个循环都引用同一个对象 -
@KirillSlatin 你完全正确。我相信我需要克隆
test。
标签: node.js unit-testing scope mocha.js