Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 预计rspec | |为零_Ruby On Rails_Ruby_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails 预计rspec | |为零

Ruby on rails 预计rspec | |为零,ruby-on-rails,ruby,rspec,factory-bot,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

我不熟悉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 ==)

您的规范要求在控制器中创建名为
@contact
的变量。我猜这是一个打字错误,您的
赋值
语句应该是:

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

看起来控制器代码中的某些内容无法运行,或者没有像您预期的那样分配该变量。我在进行测试时一定忽略了这一点。这解决了我的错误。
assigns(:system).should eq(@system)