rspec预期||没有

时间:2016-02-25 18:37:42

标签: ruby-on-rails ruby rspec factory-bot

我不熟悉rails中的测试。我正在尝试使用rspec在我的应用程序中测试系统控制器的更新操作。

以下是我正在运行的测试的代码:

describe 'Put update' do 
    before (:each) do
        @system = FactoryGirl.create(:system, name:"WAM", responsible_personnel: "Jeff", criticality: 1, status: "Available")
    end 

    context "valid attributes" do 
        it "located the requested @system" do
            put :update, id: @system, system: FactoryGirl.attributes_for(:system)
            assigns(:contact).should eq(@system)
        end
    end
end 

我的工厂代码:

 # spec/factories/systems.rb 
require 'faker'

FactoryGirl.define do  
 factory :system do |f|
    f.name { Faker::Lorem.word }
    f.responsible_personnel { Faker::Name.name}
    f.criticality {Faker::Number.between(1,5)}
    f.status "Available" || "Unavailable"
 end

 factory :invalid_system, parent: :system do |f|
    f.name nil
 end
end

当我运行测试时,我收到此错误:

 expected: #<System id: 285, name: "WAM", responsible_personnel: "Jeff", created_at: "2016-02-25 18:34:43", updated_at: "2016-02-25 18:34:43", criticality: 1, status: 0>
        got: nil

   (compared using ==)

这是我的系统控制器更新操作

def update
  if @system.update(system_params)
    flash[:success] = "System successfully updated."
    redirect_to edit_system_path
  else
    format.html { render :edit }
  end
end

1 个答案:

答案 0 :(得分:0)

您的规范期望在您的控制器中创建一个名为@contact的变量。我猜这是一个错字,你的assigns陈述应该是:

assigns(:system).should eq(@system)