- JasmineJS 教程
- JasmineJS - 首页
- JasmineJS - 概述
- JasmineJS - 环境设置
- JasmineJS - 书写测试 & 执行
- JasmineJS - BDD 架构
- JasmineJS - 测试的构建块
- JasmineJS - 断言
- JasmineJS - 跳过块
- JasmineJS - 等值检查
- JasmineJS - 布尔值检查
- JasmineJS - 顺序检查
- JasmineJS - 空值检查
- JasmineJS - 不等值检查
- JasmineJS - 非数字检查
- JasmineJS - 异常检查
- JasmineJS - beforeEach()
- JasmineJS - afterEach()
- JasmineJS - 间谍
- JasmineJS 有用资源
- JasmineJS - 快速指南
- JasmineJS - 有用资源
- JasmineJS - 讨论
JasmineJS - 间谍
Jasmine 间谍是另一个功能,它完全按照其名称指定的功能执行。它允许您监视应用程序函数调用。Jasmine 中提供了两种类型的间谍技术。第一种方法可以使用spyOn()实现,第二种方法可以使用createSpy()实现。在本章中,我们将进一步了解这两种方法。
spyOn()
spyOn() 内置于 Jasmine 库中,允许您监视一段特定的代码。让我们创建一个新的规范文件“spyJasmineSpec.js”和另一个名为“spyJasmine.js”的js文件。以下是这两个文件的条目。
SpyJasmine.js
var Person = function() {}; Person.prototype.sayHelloWorld = function(dict) { return dict.hello() + " " + dict.world(); }; var Dictionary = function() {}; Dictionary.prototype.hello = function() { return "hello"; }; Dictionary.prototype.world = function() { return "world"; };
SpyJasmineSpec.js
describe("Example Of jasmine Spy using spyOn()", function() { it('uses the dictionary to say "hello world"', function() { var dictionary = new Dictionary; var person = new Person; spyOn(dictionary, "hello"); // replace hello function with a spy spyOn(dictionary, "world"); // replace world function with another spy person.sayHelloWorld(dictionary); expect(dictionary.hello).toHaveBeenCalled(); // not possible without first spy expect(dictionary.world).toHaveBeenCalled(); // not possible withoutsecond spy }); });
在上面的代码片段中,我们希望 person 对象说“Hello world”,但我们也希望 person 对象咨询 dictionary 对象以提供输出文字“Hello world”。
查看规范文件,您可以在其中看到我们使用了 spyOn() 函数,该函数实际上模拟了hello和world函数的功能。因此,我们实际上并没有调用函数,而是模拟了函数调用。这就是间谍的特殊之处。上面的代码片段将产生以下输出。
createSpy()
另一种获得间谍功能的方法是使用 createSpy()。让我们使用以下代码修改我们的两个js文件。
SpyJasmine.js
var Person = function() {}; Person.prototype.sayHelloWorld = function(dict) { return dict.hello() + " " + dict.world(); }; var Dictionary = function() {}; Dictionary.prototype.hello = function() { return "hello"; }; Dictionary.prototype.world = function() { return "world"; };
SpyJasmineSpec.js
describe("Example Of jasmine Spy using Create Spy", function() { it("can have a spy function", function() { var person = new Person(); person.getName11 = jasmine.createSpy("Name spy"); person.getName11(); expect(person.getName11).toHaveBeenCalled(); }); });
查看规范文件,我们正在调用Person对象的getName11()。尽管此函数在spy Jasmine.js中的 person 对象中不存在,但我们没有收到任何错误,因此输出为绿色且为正。在此示例中,createSpy() 方法实际上模拟了 getName11() 的功能。
上面的代码将生成以下输出。
广告