ilo*_*sti 5 javascript jasmine spyon
在 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);
});
});
Run Code Online (Sandbox Code Playgroud)
我一定是误解了 beforeEach 如何建立和拆除变量范围,或者可能有一个步骤使该describe部分中的变量被重置?或者他们从来没有真正接触过,因为我们只使用了 spy 功能而不是真正的功能?
如果你能解释bar这个规范套装中变量究竟发生了什么,那将非常有帮助,这样我就可以理解为什么它的值在上一个规范中仍然为空。
谢谢!
如果您仔细观察,您可能会发现 spyOn 正在用一个 spy 替换原始函数,该 spy 拦截函数调用并跟踪许多有关它们的潜在有用信息。我们上面遇到的问题是,一旦我们替换了原来的函数,我们就失去了它的功能。我们可以使用 andCallThrough 解决这个问题。如果在调用 spyOn 之后链接 andCallThrough(),那么 spy 会将对其的任何调用传递给原始函数
http://www.joezimjs.com/javascript/javascript-unit-testing-with-jasmine-part-2/
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |