Jasmine的spyOn()
方法是否允许执行spied on函数,或者在调用spied方法(即将获取)时拦截调用,并返回true
。
spyOn()
内部运作的解释吗?
答案 0 :(得分:1)
它只是创建一个模拟(间谍)对象并将其注入您测试的代码。
它有三个主要目的:
答案 1 :(得分:1)
间谍可以假装是在编写单元测试代码时可以使用的函数或对象,以检查函数/对象的行为
var Person = function() {};
Dictionary.prototype.FirstName = function() {
return "My FirstName";
};
Dictionary.prototype.LastName = function() {
return "My LastName";
};
Person.prototype.MyName = function() {
return FirstName() + " " + LastName();
};
Person.prototype.MyLocation = function() {
Return ”some location”;
};
describe("Person", function() {
it('uses First Name and Last Name for MyName', function() {
var person = new Person;
spyOn(person , "FirstName");
spyOn(person, "LastName");
person.MyName();
expect(person.FirstName).toHaveBeenCalled();
expect(person.LastName).toHaveBeenCalled();
});
});
通过SpyOn,你可以知道某个功能是否已被调用
expect(person. MyLocation).not.toHaveBeenCalled();
您可以确保间谍始终返回给定值并对其进行测试
spyOn(person, " MyName ").andReturn("My FirstNameMy LasttName ");
var result = person.MyName();
expect(result).toEqual("My FirstName My LasttName ");
间谍可以通过假功能调用
it("can call a fake function", function() {
var fakeFun = function() {
alert("I am a spy!”);
return "hello";
};
var person = new person();
spyOn(person, "MyName").andCallFake(fakeFun);
person. MyName (); // alert
})
您甚至可以创建新的间谍功能或对象并使用它
it("can have a spy function", function() {
var person = new Person();
person.StreetAddress = jasmine.createSpy("Some Address");
person. StreetAddress ();
expect(person. StreetAddress).toHaveBeenCalled();
});