添加gem ruby-tmdb到Gemfile,注意添加到文件最末尾。执行bundle install

https://github.com/aarongough/ruby-tmdb

对模型的第一个测试

修改spec/models/movie_spec.rb

require 'rails_helper'
require 'spec_helper'

describe Movie do
  describe 'searching Tmdb by keyword' do
    it 'calls Tmdb with title keywords' do
      expect(TmdbMovie).to receive(:find).with('Inception')
      Movie.find_in_tmdb('Inception')
    end
  end
end

修改app/models/movie.rb

class Movie < ActiveRecord::Base

  def self.find_in_tmdb(string)
    TmdbMovie.find(string)
  end

执行

bundle exec rspec -c  spec/models/movie_spec.rb

对模型的第二个测试

修改spec/models/movie_spec.rb

require 'rails_helper'
require 'spec_helper'

describe Movie do
  describe 'searching Tmdb by keyword' do
    it 'should call Tmdb with title keywords' do
      expect(TmdbMovie).to receive(:find).with('Inception')
      Movie.find_in_tmdb('Inception')
    end
    it 'should raise an InvalidKeyError with invalid API key' do
      expect { Movie.find_in_tmdb('Inception') }.to raise_error(Movie::InvalidKeyError)
    end
  end
end

修改app/models/movie.rb

class Movie < ActiveRecord::Base
  class Movie::InvalidKeyError < StandardError ; end
  def self.find_in_tmdb(string)
    TmdbMovie.find(string)
  end

执行

bundle exec rspec -c  spec/models/movie_spec.rb

测试没通过,但可以简单修改app/models/movie.rb使得测试被通过

class Movie < ActiveRecord::Base
  class Movie::InvalidKeyError < StandardError ; end
  def self.find_in_tmdb(string)
    TmdbMovie.find(string)
    rescue NoMethodError => tmdb_gem_exception
    rescue ArgumentError => argument_exception
    rescue TypeError => type_exception
    if 1
      raise Movie::InvalidKeyError, 'Invalid API key'
    else
      raise tmdb_gem_exception
    end
  end

附注

如果把模型的调用改成