我有這個問題涉及到測試模型誤差與摩卡:如何使用Mocha和rspec測試模型錯誤?
這是我的控制器(API /藝術家控制器):
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
這是它發生故障時,有關藝術家控制器測試:
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)>'
我開始使用摩卡,所以我不知道是否有一個當我想測試重複名稱的驗證時,測試特定情況下json結果的方法。
如何「你不應該這樣做」回答這個問題? –