2011-03-08 36 views
14

tôi thường muốn làmPhạm vi hằng số để một bối cảnh rspec

context "empty stack" do 
    SOME_CONSTANT = "value" 
    it "should be empty" do 
    # use SOME_CONSTANT 
    end 
end 

context "populated stack" do 
    SOME_CONSTANT = "a different value" 
    it "should have some items" do 
    # use SOME_CONSTANT 
    end 
end 

ruby ​​không phạm vi hằng số để đóng cửa vì vậy họ rò rỉ ra ngoài. Có ai có một trick để khai báo các hằng số được scoped đến một bối cảnh?

Trả lời

21

Thay đổi việc kê khai của các hằng số:
từ SOME_CONSTANT = "value"
để self::SOME_CONSTANT = "value"

RSpec tạo ra một lớp ẩn danh cho mỗi bộ thông số kỹ thuật (bối cảnh trong ví dụ của bạn) mà nó đi qua. Khai báo một hằng số không có self:: trong một lớp ẩn danh làm cho nó có sẵn trong phạm vi toàn cục và được hiển thị cho tất cả các thông số kỹ thuật. Việc thay đổi khai báo hằng số thành self:: đảm bảo rằng nó chỉ hiển thị trong lớp ẩn danh.

+0

Thú vị - cảm ơn. – zetetic

+0

Hoàn hảo! Cảm ơn – opsb

+0

Đã không làm việc cho tôi trong 'tính năng' của Capybara. – Nakilon

14

Sau khi sử dụng rspec lâu hơn, tôi nghĩ cách tiếp cận thành ngữ hơn là sử dụng let.

context "empty stack" do 
    let(:some_constant){ "value" } 

    it "should be empty" do 
    puts some_constant 
    end 
end 

context "populated stack" do 
    let(:some_constant){ "a different value" } 

    it "should have some items" do 
    puts some_constant 
    end 
end 
+2

Tôi hoàn toàn khuyên bạn nên sử dụng cấu trúc 'let'. Đọc thêm về 'let' ở đây: https://www.relishapp.com/rspec/rspec-core/docs/helper-methods/let-and-let – Nicolas

+0

Tôi muốn sử dụng' let' nhưng nó không có sẵn ở trước khối. – 23inhouse

+0

Điều đó không đúng. Định nghĩa với 'let' có sẵn trong' before', 'before (: each)' và 'before (: suite)'. Chúng chỉ không làm việc với 'before (: all)'. – brainbag

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