Tôi mới đến Rails và RSpec và tôi đang sử dụng RSpec để kiểm tra phương pháp điều khiển này bao gồm xử lý ngoại lệ:Làm cách nào để tăng lỗi khi sử dụng Rspec trong Rails?
def search_movies_director
@current_movie = Movie.find(params[:id])
begin
@movies = Movie.find_movies_director(params[:id])
rescue Movie::NoDirectorError
flash[:warning] = "#{@current_movie} has no director info"
redirect_to movies_path
end
end
tôi không thể tìm ra cách để kiểm tra một cách chính xác con đường cho biết: sau khi tìm kiếm không hợp lệ (khi nhận được lỗi) nó sẽ chuyển hướng đến trang chủ. Tôi cố gắng một cái gì đó như thế này:
describe MoviesController do
describe 'Finding Movies With Same Director' do
#some other code
context 'after invalid search' do
it 'should redirect to the homepage' do
Movie.stub(:find)
Movie.stub(:find_movies_director).and_raise(Movie::NoDirectorError)
get :search_movies_director, {:id => '1'}
response.should redirect_to movies_path
end
end
end
end
Sau khi chạy thử nghiệm không thành công với một lỗi: NameError: uninitialized constant Movie::NoDirectorError
Làm thế nào để nâng cao giả một lỗi trong bài kiểm tra này để nó thực sự kiểm tra xem chuyển hướng sẽ xảy ra?
Cảm ơn!
UPDATE:
Như nzifnab giải thích, nó có thể không xác định vị trí Movie::NoDirectorError
. Tôi quên định nghĩa lớp ngoại lệ này. Vì vậy, tôi đã thêm nó vào app/models/movie.rb
:
class Movie < ActiveRecord::Base
class Movie::NoDirectorError < StandardError ; end
#some model methods
end
Điều này giải quyết được vấn đề của tôi và thử nghiệm này vượt qua.
Bạn nói đúng, 'Phim :: NoDirectorError' không được định nghĩa ở bất cứ đâu. Tôi đã định nghĩa lớp ngoại lệ này trong 'app/models/movie.rb' và thử nghiệm của tôi đã trôi qua ngay bây giờ. Cảm ơn! –