输出:
1) LabelsController#create label is new creates a new label Failure/Error: post :create,attributes[:label],format: :Json NoMethodError: undefined method `save!' for nil:NilClass # ./app/models/labeling.rb:17:in `update_target'
在标签模型中:
after_create :update_targetdef update_target self.target.save!end
测试:
require 'spec_helper'describe LabelsController do before(:each) do controller.stub(:current_user).and_return(mock_model(User)) stub_request(:any,"www.example.com").to_return(status: 200) end describe "#create" do context "label is new" do it "creates a new label" do attributes = { label: { name: "test",labeling: { target_type: "link",target_ID: 1 } } } response.status.should == 200 post :create,format: :Json end end endend
贴标控制器:
def create label = Label.find_by_name(params[:name]) labeling = label.labelings.build do |lb| lb.user_ID = current_user.ID lb.target_type = params[:labeling][:target_type] lb.target_ID = params[:labeling][:target_ID] end if labeling.save render Json: { name: label.name,ID: label.ID,labeling: { ID: labeling.ID } } end end解决方法 从它的外观来看,你没有数据库中ID为1的Target,所以在你引用self.target的地方,返回的值是nil.
我在你的情况下做的是首先创建一个目标,然后将其ID传递给属性hash:
target = Traget.create!attributes = { label: { name: "test",target_ID: target.ID } } }
这样你就不需要存根了.
如果你真的必须存根该方法,你可以使用RSpecs any_instance方法:
Labeling.any_instance.stub(:update_target).and_return(true)总结
以上是内存溢出为你收集整理的ruby-on-rails – 如何存根after_create回调保存!在模特?全部内容,希望文章能够帮你解决ruby-on-rails – 如何存根after_create回调保存!在模特?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)