2009-03-19 1 views
9

Tôi đang sử dụng dưa chuột để tạo tập lệnh thử nghiệm có thể được thực thi bởi một công cụ hoặc con người ... do đó không phải là việc sử dụng tiêu chuẩn.Làm cách nào để truy cập trường hợp và tên mẫu trong Dưa chuột?

Tuy nhiên, tôi muốn chuyển qua kịch bản và tên mẫu thông qua đầu ra của mình.

Điều này có khả thi không?

+0

Tôi đang mong đợi giải pháp giống như Trước khi | đặt scenario.name kết thúc nhưng không có phương thức tên và đối tượng kịch bản có vẻ là một Cucumber :: Ast :: OutlineTable :: ExampleCells trong trường hợp của tôi khi tôi đang sử dụng Kịch bản phác thảo –

Trả lời

8

Tìm thấy nó .. (với một số sự giúp đỡ từ Tim Walker)

Before do |scenario| 
puts "Before Scenario: #{scenario.to_sexp[2]}" 
. 
. 
. 
end 

SExpression của bạn có thể khác nhau, vì vậy nó có giá trị làm một scenario.to_sexp.inspect để xem những gì cây đó là.

Aslak muốn tránh hiển thị các thuộc tính trên lớp học của mình (đó là quyết định tôi đồng ý, vì vậy tôi rất vui khi thực hiện công việc này).

+2

'scenario.name' dường như hoạt động tốt trên các phiên bản hiện tại của Cucumber. – jpatokal

2

Câu trả lời nghiêm túc hơn (hoặc ít nhất, gợi ý): sử dụng sự phản chiếu của ruby ​​để cố gắng tìm thấy những gì bạn đang tìm kiếm. Lấy các đối tượng có khả năng, tìm ra phương pháp nào họ có và xem liệu bạn có thể tìm thấy nó hay không. Ví dụ:

File.open('happy_hunting.log','a') { |f| 
    f.print "Scenario supports: #{(scenario.methods - Object.methods).inspect}\n" 
    } 

và sau đó lặp lại để tìm hiểu xem ở đâu.

Một đề xuất khác, hãy xem nguồn.

+0

Điều đó không có tác dụng vì không có đối tượng kịch bản nào có sẵn trong kịch bản - trừ khi bạn chụp nó với khối Trước, như được hiển thị trong câu trả lời của Nigel. – jpatokal

0

Tôi đã làm điều gì đó không ổn định. Khi tôi sử dụng thông tin này để gỡ lỗi, thao tác này sẽ hoạt động ngay bây giờ, cho đến khi tôi tìm thấy thứ gì đó tốt hơn.

@Before 
public void printTestInfoBeforeScenario(Scenario scenario) { 
    LOGGER.info("Upcoming Test: "+scenario.getSourceTagNames()); 
} 

@After 
public void printTestInfoAfterScenario(Scenario scenario) { 
    LOGGER.info("Test Complete: " + scenario.getSourceTagNames() + " Status: " + scenario.getStatus()); 
}