Createspy 和 createspyobj 的区别是什么

我已经在我的代码中使用了。

return $provide.decorator('aservice', function($delegate) {
$delegate.addFn = jasmine.createSpy().andReturn(true);
return $delegate;
});

在那里,createSpy 做什么? 我可以将 createSpy 调用更改为 createspyobj 调用吗。

通过使用 createSpy,我们可以创建一个函数/方法模拟?

有什么区别。

83652 次浏览

jasmine.createSpy可以在没有可监视的函数时使用。它将像 spyOn一样跟踪调用和参数,但是没有实现。

jasmine.createSpyObj用于创建将监视一个或多个方法的 mock。它返回一个对象,该对象对于间谍的每个字符串都具有属性。

如果你想创建一个模拟,你应该使用 jasmine.createSpyObj

从茉莉花文件 http://jasmine.github.io/2.0/introduction.html..。

CreateSpy:

describe("A spy, when created manually", function() {
var whatAmI;


beforeEach(function() {
whatAmI = jasmine.createSpy('whatAmI');


whatAmI("I", "am", "a", "spy");
});


it("is named, which helps in error reporting", function() {
expect(whatAmI.and.identity()).toEqual('whatAmI');
});


it("tracks that the spy was called", function() {
expect(whatAmI).toHaveBeenCalled();
});


it("tracks its number of calls", function() {
expect(whatAmI.calls.count()).toEqual(1);
});


it("tracks all the arguments of its calls", function() {
expect(whatAmI).toHaveBeenCalledWith("I", "am", "a", "spy");
});


it("allows access to the most recent call", function() {
expect(whatAmI.calls.mostRecent().args[0]).toEqual("I");
});
});

CreateSpyObj:

describe("Multiple spies, when created manually", function() {
var tape;


beforeEach(function() {
tape = jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']);


tape.play();
tape.pause();
tape.rewind(0);
});


it("creates spies for each requested function", function() {
expect(tape.play).toBeDefined();
expect(tape.pause).toBeDefined();
expect(tape.stop).toBeDefined();
expect(tape.rewind).toBeDefined();
});


it("tracks that the spies were called", function() {
expect(tape.play).toHaveBeenCalled();
expect(tape.pause).toHaveBeenCalled();
expect(tape.rewind).toHaveBeenCalled();
expect(tape.stop).not.toHaveBeenCalled();
});


it("tracks all the arguments of its calls", function() {
expect(tape.rewind).toHaveBeenCalledWith(0);
});
});