我不熟悉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
答案 0 :(得分:0)
您的规范期望在您的控制器中创建一个名为@contact
的变量。我猜这是一个错字,你的assigns
陈述应该是:
assigns(:system).should eq(@system)