2012-09-26 32 views
17

Làm cách nào để bạn kiểm tra bộ điều khiển trong Rspec nếu bộ điều khiển chỉ phản hồi với javascript? Ví dụ này sẽ được mã thực tế của tôi:Kiểm tra bộ điều khiển Rspec với Javascript

một số view.html.erb

link_to 'More Chips', add_chips_path, :remote => true 

chips_controller

def add_chips 
    Chips.create(:color => :red) 
    @chips = Chips.all 
end 

add_chips.js.erb

$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>'); 

RSpec thử nghiệm

SPE c/controllers/chips_controller_spec

it "should add chips" do 
    post :add_chips, :format => 'js' 
end 

Khi tôi cố gắng gửi đến này sử dụng RSpec tôi nhận được một lỗi Template Thiếu bởi vì nó được gửi một yêu cầu HTML nhưng không có một chế độ xem HTML. Tôi đã cố gắng đi qua trong một định dạng nhưng điều đó dường như không hoạt động. Tôi biết tôi có thể đưa vào một chế độ xem html "giả" để làm cho nó vượt qua nhưng điều đó có vẻ giống như một hack.

Cảm ơn

Trả lời

15

Ok, tôi đã tìm ra những gì tôi đã làm sai. Tôi đã vượt qua một tham số băm trong thử nghiệm của tôi và định dạng cần phải được bao gồm trong cùng một băm. nên thay vì điều này:

@params = {:chip_color => 'red'} 
... 
post :add_chips, @params, :format => 'js' 

Nó cần phải giống như thế này

@params = {:chip_color => 'red', :format => 'js'} 
... 
post :add_chips, @params 
43

Nếu bạn đang cố gắng để thực hiện một yêu cầu Ajax từ một spec điều khiển, thay vì làm post :add_chips và đi qua các format như một tham số, bạn nên làm:

xhr :post, :add_chips, @params 

... không có format trong thông số. Điều đó sẽ thực hiện yêu cầu JavaScript và phản hồi với mẫu .js.

Cập nhật:

Trong các phiên bản gần đây của Rails/RSpec, bạn thay vì nên làm:

post :add_chips, params: @params, xhr: true 
+1

Làm việc như sự quyến rũ! – Surya

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