Ben*_*Ben 3 javascript jasmine
给出以下代码(页面中包含Jasmine):
function MyCtorFn() {
this.myMethod = function() {
console.log("hello world")
}
}
//arrange
var myCtrFn = new MyCtorFn();
spyOn(myCtrFn, 'myMethod');
//act
myCtrFn.myMethod();
Run Code Online (Sandbox Code Playgroud)
为什么以下返回undefined?
myCtrFn.myMethod.callCount
Run Code Online (Sandbox Code Playgroud)
.callCount是属性的spy.
function MyCtorFn() {
this.myMethod = function() {
console.log("hello world")
}
}
//arrange
var myCtrFn = new MyCtorFn();
var spy = spyOn(myCtrFn, 'myMethod');
//act
myCtrFn.myMethod();
spy.callCount; // 1
Run Code Online (Sandbox Code Playgroud)
实际上,它不起作用是非常奇怪的,因为该spyOn方法应该用间谍取代原始方法.
见https://github.com/pivotal/jasmine/blob/master/lib/jasmine-core/jasmine.js行582.
我个人认为这是非常奇怪的行为.这将导致与其他框架的各种不兼容性.如果你有两个茉莉花实例并且它们都试图窥探相同的功能怎么办?很奇怪.
这就是为什么我认为属性只是在间谍上.
间谍的全部意义在于你无法察觉吗?
var trustedFunction = function () {};
var obj = {
foo: trustedFunction
}
spyOn(obj, "foo");
obj.foo === trustedFunction; // false? BUSTED
Run Code Online (Sandbox Code Playgroud)
也许间谍不是正确的比喻.A CallTrackerWrapper将是一个不那么邪恶和更卑微的名字.
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |