2011-08-24 40 views
6

Có ai biết cách bạn có thể chỉ định thông báo hỗ trợ đang hoạt động không? Những điều sau đây dường như không hoạt động. Nó phát hiện các thông báo khung đường ray mặc định nhưng không phải là tùy chỉnh của tôi.Kiểm tra ActiveSupport :: Thông báo với rspec

it 'sends a "product.search" notification to any subscribers listening' 
    ActiveSupport::Notifications.should_receive(:instrument).with("product.search", :search => search) 
    get :search, ... 
end 

Nếu tôi thay đổi thông số để kiểm tra kết quả của mã thuê bao (ví dụ: thay đổi bản ghi khi tạo bản ghi DB). Điều đó xác nhận rằng nó hoạt động tốt. Nhưng, có vẻ như sai khi chỉ định những gì người đăng ký làm ở đây, tôi chỉ muốn thông báo rằng thông báo đang được gửi. Bất kỳ suy nghĩ sẽ được đánh giá cao.

EDIT:

Đây là mã điều khiển mà tôi đang cố gắng để spec:

ActiveSupport::Notifications.instrument("product.search", :search => 'test') 
+0

là thẻ của bạn 'rpsec' một lỗi đánh máy? [Có lẽ dự định 'rspec'?] – Shad

Trả lời

2

tôi đã không thể đạt được các thử nghiệm sử dụng một :get hành động thường xuyên, một cái gì đó nên can thiệp bằng cách nào đó và chỉ các thông báo start_processingprocess_action được kích hoạt. Tôi đoán nó đã bị vô hiệu hóa vì lợi ích hiệu suất.

Nhưng điều này làm việc thành công:

it 'sends a "product.search" notification to any subscribers listening' 
    ActiveSupport::Notifications.should_receive(:instrument).with("product.search", :search => "test") 
    controller.index 
end 
5

tôi đã cùng một vấn đề và viết phương pháp helper rspec sau dưới đây:

def notification_payload_for(notification) 
    payload = nil 
    subscription = ActiveSupport::Notifications.subscribe notification do |name, start, finish, id, _payload| 
     payload = _payload 
    end 

    yield 

    ActiveSupport::Notifications.unsubscribe(subscription) 

    return payload 
    end 

Bằng cách này, tôi có thể sử dụng nó như sau:

it "should raise the my_notification_name notification" do 
    payload = notification_payload_for('my_notification_name') do 
     # do stuff that should raise the proper notification 
    end 

    # test to see that the payload has the correct info 
    end 
Các vấn đề liên quan