2012-07-01 16 views
7

Tôi có sau chuyển đổi:Dưa chuột: Làm thế nào để sử dụng cùng một regex trong các biến đổi khác nhau?

Transform /^"([^"]+)" Phase$/ do |name| 
    # Returns the phase named 'name', 
    # or raises an exception if it doesn't exist 
end 

mà làm việc với định nghĩa bước như thế này:

Then /("(?:[^"]+)" Phase) should do something/ do |phase| 
    # Should fail if the specified phase doesn't exist 
end 

Tôi cũng đã định nghĩa bước sau đó sử dụng cùng "([^"]+)" Phase mẫu:

Given /("([^"]+)" Phase) follows ("([^"]+)" Phase)/ do |pre, post| 
    # Should create the specified phases 
end 

Ở đây tôi không muốn định nghĩa bước thất bại nếu các giai đoạn được chỉ định không tồn tại. Thay vào đó, tôi muốn tạo các giai đoạn.

Tôi muốn tạo một Biến đổi để tạo ra giai đoạn cho phép tôi thực hiện các định nghĩa bước một chút, nhưng tôi không thể làm như vậy vì tôi đã có Biến đổi được đề cập ở trên có cùng độ chính xác.

Về cơ bản, tôi muốn tạo giai đoạn nếu nó là một bước Given và tăng không thành công nếu không.

Bất kỳ ý tưởng nào?

+2

+1 Chỉ dành cho tiêu đề. Sẽ là một bộ phim hay. –

Trả lời

4

Nếu regexps giống nhau, thì bạn không thực sự có tùy chọn để phân biệt hành vi. Việc xác định xem bạn có đang ở trong một số Given bước có thể là hay không, nhưng ngay cả khi có, nó sẽ là một số ma thuật rất tốt với tiềm năng gây ngạc nhiên cho người đọc và tác giả tương lai ...

và cách tiết lộ rõ ​​ràng nhất để thực hiện việc này là nêu rõ bản chất của Cụm từ trong ngôn ngữ bước, sau đó bạn có thể có 2 biến đổi được tách biệt rõ ràng, ví dụ:

EXISTING_PHASE = Transform /^existing Phase "([^"]+)"$/ do |phase| 
    # raise error if it doesn't exist 
end 

UNEXISTING_PHASE = Transform /^unknown Phase "([^"]+)"$/ do |phase| 
    # create the phase if it doesn't exist 
end 
Các vấn đề liên quan