2010-10-19 47 views
9

Tôi đang chạy qua số điện thoại Rails Tutorial của Michael Hartl.Xác minh tiêu đề trang bằng rspec

Tôi đang cố xác minh tiêu đề trang của mình. Xét nghiệm này trông như thế này: phần đầu

it "should have the right title" do 
     get 'home' 
     response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home") 
    end 

HTML trông như thế này

<head> 
    <title>Ruby on Rails Tutorial Sample App | Home</title> 
</head> 

tôi nhận được sự thất bại sau

1) PagesController GET 'home' should have the right title Failure/Error: response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home") expected following output to contain a Ruby on Rails Tutorial Sample App | Home tag: # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in '

Tôi đang mong đợi này để vượt qua. Tôi đang làm gì sai? Tôi đang sử dụng Rails 3 và RSpec 2.0.0

Trả lời

4

Thông số bộ điều khiển thường không hiển thị chế độ xem hoàn chỉnh vì chúng được thiết kế để kiểm tra bộ điều khiển tách biệt. Bạn có thể nói RSpec để render toàn bộ trang bằng cách bao gồm các chỉ thị integrate_views ở phía trên cùng của ví dụ nhóm:

describe MyController do 
    integrate_views 

Tuy nhiên bạn nên tự hỏi mình nếu bạn thực sự muốn làm điều này, hoặc nếu nó sẽ có ý nghĩa hơn đối với viết thông số kỹ thuật xem.

btw bạn cũng có thể sử dụng cú pháp CSS3 chọn để tiết kiệm một vài tổ hợp phím (có thể cần phải bao gồm quẹt Webrat cho việc này):

response.should have_selector("title:contains('Ruby on Rails Tutorial Sample App | Home')") 

EDIT

Đối Rspec2, thay thế integrate_views với render_views

+0

tôi đã cố gắng đưa các chỉ thị integrate_views ở phía trên, nhưng bây giờ tôi nhận được một lỗi cú pháp –

+2

Rất tiếc, bạn phải nằm trên RSpec 2. Hãy thử 'render_views' . – zetetic

+0

Cảm ơn, có thể chỉ cần chỉnh sửa câu trả lời của bạn để nói rằng bạn nên sử dụng render_views trên Rspec 2? –

0

Tôi nghi ngờ bạn có lỗi đánh máy ở đâu đó.

Ngay lúc này, tôi đang làm việc thông qua Bài tập 4 của Chương 11. Mọi vấn đề đơn lẻ mà tôi gặp phải với hướng dẫn hóa ra là lỗi đánh máy.

Lưu ý: Tôi không cắt và dán. Tôi đang đục tất cả các mã bằng tay.

+0

Tôi đã làm điều sao chép-dán ... Và nó hoạt động hoàn hảo một khi tôi đặt render_views ở đầu trang –

2

Tôi thấy việc chuyển sang Capybara dễ dàng hơn (tôi đang sử dụng Rails 3.0.1, Rspec 2.0.1, Ruby 1.9.2). Bây giờ bạn có thể làm điều gì đó như

page.should have_css('title', :text => 'Ruby on Rails Tutorial Sample App | Home') 
2

Câu hỏi này có vẻ cũ, điều này giải thích vì sao bây giờ có cách tốt hơn.

Các công trình sau đây cũng cho tôi:

it "has the correct page title", js: true do 
    visit "https://stackoverflow.com/users/sign_in" # for example 
    expect(page.title).to include "Sign In or Create a New Account" 
end 
+1

Ngoài ra, bạn nên rất cẩn thận khi sử dụng phương pháp 'include' trong trường hợp này. Nếu bạn có chuỗi đó trong tiêu đề nó sẽ vượt qua, tuy nhiên, có thể có những điều không mong muốn là tốt. Tôi khuyên bạn nên sử dụng phương pháp 'eq' trong trường hợp này, vì nó sẽ thất bại nếu nó không phải là chuỗi chính xác được chuyển. –

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