2015-03-17 23 views
5
này

Từ các tài liệu hoa nhài (http://jasmine.github.io/2.0/introduction.html):hoa nhài: phạm vi

Các từ khóa này

Một cách khác để chia sẻ các biến giữa một beforeEach, nó, và afterEach là thông qua các từ khóa này. Mỗi thông số kỹ thuật beforeEach/it/afterEach có giá trị này là> cùng một đối tượng trống rỗng được đặt trở lại trống cho thông số kỹ thuật tiếp theo trướcEach/it/afterEach.

Sự hiểu biết của tôi về điều này trong Javascript là, điều này được giới hạn trong phạm vi chức năng thực tế. Vì vậy, tôi sẽ mong đợi rằng nó sẽ được ràng buộc với bối cảnh bối cảnh khác nhau (những người phụ thuộc vào chức năng) bên trong beforeEach/it/afterEach.

ví dụ:

describe('Spec', function(){ 
    var eachThis = null; 
    beforeEach(function(){ 
    eachThis = this; 
    }); 
    it('check this', function(){ 
    except(this).toEqual(eachThis); 
    } 
}; 

Vì vậy, thử nghiệm này sẽ được thông qua.

Hoa nhài có thay đổi hành vi của việc này hay tôi đã làm gì sai?

Trả lời

3

Tôi nghĩ rằng ví dụ bạn có thể có một số vấn đề, nhưng bạn là chính xác trong suy nghĩ nhài mà thao túng các this tài liệu tham khảo khi sử dụng beforeEach, beforeAll vv

Dưới đây là một ví dụ minh họa - lưu ý rằng tất cả các dự đoán liệt kê dưới đây sẽ vượt qua:

(function() { 
    describe("without beforeEach", function() { 
    (function() { 
     // this is not inside of a beforeEach call 
     this.dog = "Spot"; 
     alert(this.dog); 
    })(); 
    it("should not have access to a dog property from `this`", function() { 
     expect(this.dog).toBeUndefined(); // because there is no `dog` member of the object currently referenced by `this` 
    }); 
    }); 

    describe("a beforeEach test", function() { 
    beforeEach(function() { 
     this.dog = "Spot"; 
    }); 
    it("should work now because we used `beforeEach`", function() { 
     expect(this.dog).toEqual("Spot"); 
    }); 

    }); 
})(); 

Nói chung, suy nghĩ của bạn về 'này' được xác định trong phạm vi chức năng là đúng, nhưng việc thực hiện này trong hoa nhài cho thấy làm thế nào bạn có thể cung cấp một đối tượng cụ thể được tham chiếu bởi ' 'keywo này thứ nếu bạn muốn. Cách điển hình này được thực hiện trong javascript là sử dụng Function.prototype.apply() cho phép bạn chuyển đối tượng tùy ý cho tham chiếu this làm thông số đầu tiên của hàm.

+0

Thnx. Tôi biết hành vi áp dụng. Vấn đề là, nó ẩn ở đây và hành vi trông giống như oop truyền thống. – Johannes

+0

Tôi sẽ tưởng tượng hành vi được chỉ ra trong tài liệu cho chính xác lý do bạn đề xuất (điều đó không rõ ràng) - tôi sẽ so sánh chặt chẽ điều này với đại biểu trong C#, nhưng tôi chắc rằng có OO khác ví dụ tương tự. Tôi cố gắng không đưa ra bất kỳ giả định nào về kiến ​​thức của một người hỏi câu hỏi ở đây, tôi chỉ nghĩ rằng cuộc thảo luận về áp dụng rất hữu ích cho người ngẫu nhiên googling để biết thông tin trên interwebs :) –

+0

'Điều này' có hoạt động giữa các thử nghiệm không đồng bộ không? –

0

Vì vậy, thử nghiệm này sẽ được thông qua.

Có, và thực hiện.

đã nhài thay đổi hành vi này

Nó không giống như nó.

đã làm tôi nhận được một cái gì đó sai

Bạn có lỗi cú pháp và lỗi chính tả trong mã của bạn (ví dụ except ->expect).


Ngoài ra, toEqual không kiểm tra danh tính của một đối tượng, vì vậy ngay cả expect(this).toEqual({}); sẽ vượt qua. toBe là một phương pháp tốt hơn ở đây.

+0

'Điều này' có hoạt động giữa các thử nghiệm không đồng bộ không? –

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