我有这个问题涉及到测试模型误差与摩卡:如何使用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结果的方法。
如何“你不应该这样做”回答这个问题? –