2011-10-12 39 views
10

Tôi muốn để có thể hiển thị một tên nhóm thử nghiệm (và tổ tiên) trong thời gian trước (: tất cả) phương pháp:Làm thế nào tôi có thể truy cập siêu dữ liệu trong rspec trước (: tất cả)?

describe "My awesome app" do 
    before(:all) do 
    puts running_example_group.metadata[:full_description] # <- what I'm imagining 
    ... 
    done 
    ... 
    describe "awesome widget" do 
    before (:all) do 
     puts running_example_group.metadata[:full_description] # <- what I'm imagining 
     ... 
    done 
    ... 
    done 
done 

Ý tưởng là sẽ tạo ra kết quả:

My awesome app 
My awesome app awesome widget 

Dữ liệu này có sẵn bên trong mệnh đề "nó", nhưng tôi không thể tìm ra trước đó (: tất cả). Nó không có sẵn? Tôi chỉ là một sai lầm ngớ ngẩn?

+0

https://github.com/rspec/rspec-core/issues/6 có thể gợi ý rằng chức năng không tồn tại? Hoặc có lẽ chỉ cần thiết lập siêu dữ liệu trong trước (: tất cả) là không khả thi? –

Trả lời

9

Bên trong khối before(:all), không có "ví dụ đang chạy", nhưng bạn vẫn có thể truy cập siêu dữ liệu qua RSpec::Core::ExampleGroup. Dưới đây là ví dụ về cách bạn có thể truy cập siêu dữ liệu từ các phạm vi khác nhau:

describe "My app", js: true do 

    context "with js set to #{metadata[:js]}" do 
    before :all do 
     puts "in before block: js is set to #{self.class.metadata[:js]}" 
    end 

    it "works" do 
     puts "in example: js is set to #{example.metadata[:js]}" 
    end 
    end 

end 

Để biết thêm thông tin, vui lòng xem this comment in rspec/rspec-core#42.

+0

Tuyệt. Tôi không sử dụng rspec trên dự án hiện tại của tôi, vì vậy nếu ai đó có thể xác nhận điều này làm việc cho họ thì tôi sẽ chấp nhận câu trả lời. –

+0

Hoặc ...;) bạn có thể chỉ cần lưu ví dụ, chạy 'gem install rspec' và thực thi spec thông qua' rspec example_spec.rb'. – rubiii

+0

Hah! Tôi sẽ thử. Tôi sẽ cần phải lấy một máy tính với Ruby cài đặt trên nó, nhưng tôi nghĩ rằng tôi có một. Nếu tôi kết thúc với môi trường của tôi thì tôi có thể từ bỏ. =) –

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