2014-06-20 30 views
16

Tôi mới sử dụng Jasmine và thử nghiệm nói chung. Một khối mã của tôi kiểm tra xem thư viện của tôi đã được khởi tạo bằng toán tử mới chưa:Kiểm tra đối với instanceof bằng cách sử dụng Jasmine

//if 'this' isn't an instance of mylib... 
if (!(this instanceof mylib)) { 
    //return a new instance 
    return new mylib(); 
} 

Làm cách nào để kiểm tra điều này bằng cách sử dụng Jasmine?

+0

bản sao có thể có của [Cách sử dụng Jasmine để kiểm tra xem một cá thể có được tạo không?] (Http://stackoverflow.com/questions/23062034/how-to-use-jasmine-to-test-if-an-instance -được tạo ra) – Chic

Trả lời

2

Jasmine sử dụng đối sánh để thực hiện xác nhận của nó, vì vậy bạn có thể viết trình phù hợp tùy chỉnh của riêng bạn để kiểm tra bất kỳ thứ gì bạn muốn, bao gồm cả kiểm tra cá thể. https://github.com/pivotal/jasmine/wiki/Matchers

Cụ thể, hãy xem phần Viết đối sánh mới.

31

Để kiểm tra xem một cái gì đó là một instanceof [Object] Jasmine hiện nay cung cấp jasmine.any:

it("matches any value", function() { 
    expect({}).toEqual(jasmine.any(Object)); 
    expect(12).toEqual(jasmine.any(Number)); 
}); 
4

Tôi thích dễ đọc hơn/trực quan (theo ý kiến ​​của tôi) sử dụng với các nhà điều hành instanceof.

class Parent {} 
class Child extends Parent {} 

let c = new Child(); 

expect(c instanceof Child).toBeTruthy(); 
expect(c instanceof Parent).toBeTruthy(); 

Vì mục đích hoàn chỉnh, bạn cũng có thể sử dụng nguyên mẫu constructor thuộc tính trong một số trường hợp.

expect(my_var_1.constructor).toBe(Array); 
expect(my_var_2.constructor).toBe(Object); 
expect(my_var_3.constructor).toBe(Error); 

// ... 

BEWARE rằng điều này sẽ không hoạt động nếu bạn cần phải kiểm tra xem một đối tượng kế thừa từ khác hay không.

class Parent {} 
class Child extends Parent {} 

let c = new Child(); 

console.log(c.constructor === Child); // prints "true" 
console.log(c.constructor === Parent); // prints "false" 

Nếu bạn cần hỗ trợ thừa kế chắc chắn sử dụng instanceof điều hành hoặc jasmine.any() chức năng như Roger gợi ý.

Object.prototype.constructor tham chiếu.

Các vấn đề liên quan