Mocha を使用したモデル エラーのテストに関連するこの問題があります。
これは私のコントローラーです(Api / Artistコントローラー):
class Api::ArtistsController < ApplicationController respond_to :json def create artist = Artist.new(params[:artist]) if artist.save <-- This is where the test fails render :json=>artist else respond_with artist end end end
これは私のモデル(アーティストモデル)です:
class Artist < ActiveRecord::Base include Core::BaseModel attr_accessible :name has_many :albums validates :name, :presence=>true, :uniqueness=>{:case_sensitive=> false} default_scope where :deleted=>false end
これは、Artist コントローラーに関する失敗したテストです。
it "should not save a duplicated artist" do Artist.any_instance.stubs(:is_valid?).returns(false) Artist.any_instance.stubs(:errors).returns({:name=>[I18n.t('activerecord.errors.messages.taken')]}) post :create, :format => :json expect(response).not_to be_success expect(response.code).to eq("422") results = JSON.parse(response.body) expect(results).to include({ "errors"=>{ "name"=>[I18n.t('activerecord.errors.messages.taken')] } }) end
テストを実行すると、上記のテストで次のエラーが表示されます。
Failure/Error: post :create, :format => :json
NoMethodError:
undefined method `add_on_blank' for {}:Hash
# ./app/controllers/api/artists_controller.rb:17:in `create'
# ./spec/controllers/api/artists_controller_spec.rb:56:in `block (3 levels) in <top (required)>'
私はMochaを使い始めているので、重複した名前の検証をテストしたいときに、特定のケースのjson結果をテストする方法があるかどうかわかりません。