为什么在Jasmine中,我们不能将expect放在外部函数中
Why in Jasmine, we cannot put the expect in an outside function?
如果使用Jasmine 1.3.1,我使用
describe("TryTry", function() {
var i;
function checkForSituation(a) {
// say, if this is made into a function because
// there are a lot of processing
console.log("THERE", a);
expect(foo(3, a)).toEqual( 3 + a );
}
for (i = 0; i < 5; i++) {
console.log("HERE", i);
it("should add for " + i, function() {
checkForSituation(i);
});
}
});
和foo只是:
function foo(a, b) {
return a + b;
}
我希望它检查0到4,并打印出
HERE 0
THERE 0
HERE 1
THERE 1
...
但是,它只是在Chrome的控制台中打印为:HERE 0, HERE 1, ...
然后THERE 5
五次。有人知道为什么expect
不能放在像这样的外部函数中,如果我需要将许多步骤放入函数中,该在Jasmine中做什么?
作为旁注,有时在JavaScript中,我感觉像开发了一种全新的语言,通常可以做的事情将不起作用-并且想知道可以做些什么来防止这种类型的事情发生,一些不知道会发生的事情。
如果你想尝试一下,它在https://github.com/jianlin/jasmine-looping-an-it-calling-function-that-does-expect
我从来没有使用过Jasmine,所以我不知道这做了什么,我绝对不知道it
做了什么,但这似乎是Javascript中常见的闭包问题。
这通常发生在异步(如event
处理程序)试图访问回调中的迭代器(i
)时。到那时,循环已经结束,i
是最后一个值。使用闭包,可以捕获i
的值并正确传递。如果it
是异步的,你将无法得到你想要的console.log
结果的顺序——"HERE"将先出现,然后是"THERE"。
你可以试试下面的代码:
it("should add for " + i, (function(i) {
return function () {
checkForSituation(i);
};
})(i);
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 使用javascript在Flash中加载外部图像
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何从外部页面激活非默认引导选项卡
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 单击元素外部时进行JQuery
- 我的外部js文件无法加载
- 拆下外部分配器
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 如何在构建node-webkit应用程序后获取外部资源
- 关于引入外部javascript文件的问题&css通过https
- 访问函数外部的变量
- 为什么在Jasmine中,我们不能将expect放在外部函数中