JasmineJS - Điệp viên
Jasmine spy là một chức năng khác giống như tên gọi của nó. Nó sẽ cho phép bạn theo dõi các cuộc gọi chức năng ứng dụng của bạn. Có hai loại công nghệ do thám ở Jasmine. Phương pháp đầu tiên có thể được thực hiện bằng cách sử dụngspyOn() và phương pháp thứ hai có thể được triển khai bằng cách sử dụng createSpy(). Trong chương này, chúng ta sẽ tìm hiểu thêm về hai phương pháp luận này.
spyOn ()
spyOn () được tích hợp sẵn trong thư viện Jasmine cho phép bạn theo dõi một đoạn mã xác định. Hãy để chúng tôi tạo một tệp đặc tả mới “spyJasmineSpec.js” và một tệp khácjstệp có tên là “spyJasmine.js”. Sau đây là mục nhập của hai tệp này.
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
});
});
Trong đoạn mã trên, chúng tôi muốn đối tượng người nói “Xin chào thế giới” nhưng chúng tôi cũng muốn đối tượng người đó nên tham khảo với đối tượng từ điển để cung cấp cho chúng tôi đầu ra theo nghĩa đen “Xin chào thế giới”.
Hãy xem tệp Spec nơi bạn có thể thấy rằng chúng tôi đã sử dụng hàm spyOn (), hàm này thực sự bắt chước chức năng của hello và worldchức năng. Do đó, chúng ta không thực sự gọi hàm mà bắt chước lệnh gọi hàm. Đó là đặc sản của Điệp viên. Đoạn mã trên sẽ mang lại kết quả sau.
createSpy ()
Một phương pháp khác để có được chức năng gián điệp là sử dụng createSpy (). Hãy để chúng tôi sửa đổi hai của chúng tôijs tệp bằng cách sử dụng mã sau.
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();
});
});
Hãy xem tệp thông số kỹ thuật, chúng tôi đang gọi getName11() sau đó Personvật. Mặc dù chức năng này không có trong đối tượng person trongspy Jasmine.js, chúng tôi không gặp bất kỳ lỗi nào và do đó đầu ra có màu xanh lục và dương. Trong ví dụ này, phương thức createSpy () thực sự bắt chước chức năng của getName11 ().
Đoạn mã trên sẽ tạo ra kết quả sau.