thi*_*all 17 javascript testing spy jasmine
给定以下代码片段,您将如何创建Jasmine spyOn测试以确认doSomething在运行时调用MyFunction?
function MyFunction() {
var foo = new MyCoolObject();
foo.doSomething();
};
Run Code Online (Sandbox Code Playgroud)
这是我的测试的样子.不幸的是,在spyOn评估调用时出现错误:
describe("MyFunction", function () {
it("calls doSomething", function () {
spyOn(MyCoolObject, "doSomething");
MyFunction();
expect(MyCoolObject.doSomething).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
Jasmine似乎没有认识doSomething到那时的方法.有什么建议?
hyo*_*ong 20
另外,正如Gregg暗示的那样,我们可以使用'原型'.也就是说,我们可以监视MyCoolObject.prototype,而不是直接监视MyCoolObject.
describe("MyFunction", function () {
it("calls doSomething", function () {
spyOn(MyCoolObject.prototype, "doSomething");
MyFunction();
expect(MyCoolObject.prototype.doSomething).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
Gre*_*egg 17
当您调用时new MyCoolObject(),调用该MyCoolObject函数并获取具有相关原型的新对象.这意味着当你spyOn(MyCoolObject, "doSomething")没有在new调用返回的对象上设置间谍时,而是在函数本身的可能doSomething函数上MyCoolObject.
你应该可以这样做:
it("calls doSomething", function() {
var originalConstructor = MyCoolObject,
spiedObj;
spyOn(window, 'MyCoolObject').and.callFake(function() {
spiedObj = new originalConstructor();
spyOn(spiedObj, 'doSomething');
return spiedObj;
});
MyFunction();
expect(spiedObj.doSomething).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16634 次 |
| 最近记录: |