2011-09-14 29 views
11

Tôi có một biểu mẫu thực hiện một số công cụ Javascript mở rộng trước khi cuối cùng đăng lên URL ACTION của nó. Tôi đang viết một số bài kiểm tra đơn vị Jasmine và muốn đảm bảo nội dung Javascript xảy ra khi biểu mẫu được gửi. Tuy nhiên, tôi chắc chắn không muốn trang chuyển đến URL ACTION trong khi tôi đang thử nghiệm đơn vị.Làm cách nào để kiểm tra việc gửi biểu mẫu trong Jasmine?

tôi thấy những gì dường như là một gợi ý tốt ở đây: http://groups.google.com/group/jasmine-js/browse_thread/thread/a010eced8db17c1a?pli=1

... nhưng, như tôi khá mới để Jasmine, tôi không chắc chắn làm thế nào để thực hiện nó và không thể tìm thấy bất kỳ ví dụ điển hình trên web. Có ai có một số mã mẫu tôi có thể nhìn vào đó sẽ thực hiện những gì tôi cần?

Cảm ơn!

Trả lời

35

Có lẽ đoạn mã này có thể giúp bạn ...

it('calls ajax post on export button click', function() { 
    view.render(); 
    var form = $('#export_images_xml_form'); 
    var submitCallback = jasmine.createSpy().andReturn(false); 
    form.submit(submitCallback); 

    $('#export_images_xml_button').click(); 

    expect(form.attr('action')).toEqual('/export'); 
    expect($('#export_images_xml_form input').attr('value')).toEqual('22,33,44'); 
    expect(submitCallback).toHaveBeenCalled(); 
}); 

Những gì tôi làm là về cơ bản ngăn chặn tất cả các đệ trình cho các hình thức trao trả về false trong callback liên quan (xem hành vi submitCallback).

Sau đó, tôi cũng có thể kiểm tra gọi lại đã được gọi là ...

Hy vọng điều đó sẽ hữu ích!

+0

Chính xác những gì tôi đang tìm - cảm ơn! – recurser

+3

Bạn nên chấp nhận câu trả lời này! – noazark

+0

Tôi có thể trả lời có từ 20 phiếu bầu trở lên, nếu không có người được chấp nhận .. :) –

1

Nếu bạn không muốn kiểm tra rằng submit được gọi, bạn không cần tạo gián điệp. Với jQuery đơn giản, bạn cũng có thể đạt được hiệu quả của việc không gửi biểu mẫu. Tôi đặt mã sau bên ngoài của tất cả các bài kiểm tra, theo cách đó nó áp dụng cho tất cả các bài kiểm tra trong tệp.

$('form').on('submit', function() { 
    return false; 
}); 
Các vấn đề liên quan