为什么spyOn"停止函数“”的所有执行;Jasmine(要求澄清Jasmine 2.2间谍文件)
Why spyOn "stops all execution of a function" in Jasmine (asking for clarification on Jasmine 2.2 Documentation on Spies)
在Jasmine 2.2文档中,我无法理解最后一个演示Spies基本用法的规范。
在beforeEach()
部分中,我们设置bar = null
,然后监视foo.setBar
,然后调用foo.setBar
两次。我不明白为什么最后一个规范中有bar === null
。在间谍为规范而被拆除之前,不应该是bar === 456
吗?
以下是示例:
describe("About a Spy", function(){
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, "setBar"); // we spy
foo.setBar(123); // shouldn't bar === 123 here?
foo.setBar(456, 'another param'); // and bar === 456 here?
});
it("stops all execution on a function", function() {
// What, why, how?
expect(bar).toBeNull();
//I expected this to be the case, but it's not.
//expect(bar).toBe(456);
});
});
我一定误解了beforeEach是如何构建和拆除变量范围的,或者可能有一个步骤可以重置describe
部分中的变量?还是他们从未真正接触过,因为我们只使用了间谍功能,而不是真正的功能?
如果你能解释一下这套规范中变量bar
的具体情况,我会很有帮助,这样我就能理解为什么它的值在上一套规范中保持为空。
谢谢!
如果你仔细观察,你可能会意识到spyOn正在用一个间谍取代原来的函数,这个间谍拦截函数调用并跟踪关于它们的许多潜在有用信息。我们在上面遇到的问题是,一旦我们替换了原来的功能,我们就失去了它的功能。我们可以通过andCallThrough进行补救。如果您在调用spyOn后链接andCallThrough(),则间谍会将对它的任何调用传递给原始函数
http://www.joezimjs.com/javascript/javascript-unit-testing-with-jasmine-part-2/
相关文章:
- 为什么spyOn"停止函数“”的所有执行;Jasmine(要求澄清Jasmine 2.2间谍文件)
- 仅首先需要使用jasmine从节点添加一个文件
- 使用Jasmine捕获传递给不同JavaScript文件中函数的参数
- 在CoffeeScript文件上运行Jasmine测试时,对象未定义错误
- 在Karma+Jasmine测试中读取HTML文件
- Jasmine 不从“src”目录加载 js 文件
- 从 Jasmine 测试中引用 JavaScript 文件
- 当没有等级库文件或等级库文件为空时,Grunt-contrib-jasmine 中止任务
- 如何使用 Jasmine BDD 测试文件上传
- 如果“.jshintrc”和“karma.conf.js”,Jasmine“test”文件夹的一部分受到版本控制
- 获得404关于使用karma和jasmine对json文件进行ajax调用的自定义实现
- 使用Karma和Jasmine从JS测试文件测试编译的TypeScript
- 当使用Jasmine进行单元测试时,如何要求一个没有'子需求'的文件
- 如何在每个karma/jasmine测试文件的开头引导angular
- 如何包含PHP文件在Karma/Jasmine中运行测试
- Rails 4 + Jasmine: Jasmine找不到我的规范文件
- DRY jasmine测试——在多个.js文件之间共享代码
- 用Karma-Jasmine读取二进制文件
- 需要使用jasmine获取文件路径
- Jasmine不能从资产管道加载javascript文件