rails初始化模型或控制器中的方法? Rails测试错误

时间:2017-03-18 14:11:28

标签: ruby-on-rails ruby testing model initialization

我是Ruby on Rails的新手,我在第一个项目工作。我不是母语为英语的人,所以我没有抬头看谷歌。首先,我想知道,如果你为一个类声明一个初始化方法,如:

def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end

或者喜欢:

class Person
 def initialize(name, age)
  @name, @age = name, age
 end
end

我是否必须在控制器或相应类的模型中对该方法进行delcare?

我们在Controller中使用实例变量(@name或@age)是真的吗?我们在迁移文件中声明的模型的intance变量对吗?像:

class CreateStudents < ActiveRecord::Migration
 def up
  create_table :students do |t|
   t.string :prename, :limit => 100, :null=>false
   t.string :lastname, :limit => 100, :null=>false
   t.date :birthday, :null => false
   t.text :contact
   t.boolean :daz, :null => false, :default => false
   t.integer :form_id

   t.timestamps null: false
 end
end

def down
 drop_table :students
end

我的最后一个问题是关于rails中的测试文件。 我读过这样的话:     要求&#39; test_helper&#39;

class StudentTest < ActiveSupport::TestCase
  test "hello" do
    stud = Student.new
    assert_not stud.save
  end
end

当我运行&#34; rake test&#34;时,它出现了这个错误:

yannick@Yannux ~/SchulDatenbank $ rake test
Running via Spring preloader in process 5041
Run options: --seed 16904

# Running:

E

Finished in 0.032498s, 30.7711 runs/s, 0.0000 assertions/s.

  1) Error:
StudentTest#test_hello:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: 
NOT NULL constraint failed: students.prename: INSERT INTO 
"students" ("created_at", "updated_at", "id") VALUES 
('2017-03-18 14:04:40', '2017-03-18 14:04:40', 980190962)


1 runs, 0 assertions, 0 failures, 1 errors, 0 skips

然后我尝试了类似的东西:     要求&#39; test_helper&#39;

class StudentTest < ActiveSupport::TestCase
  test "hello" do
    assert true
  end
end

相同的错误...... 有谁知道为什么? :) 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您正在迁移中使用数据库约束&#34; pername&#34; (null:false)。 因此,当您在测试中调用 stud.save 时出现错误,因为您的stud正在尝试使用空白pername字段保存db中的stud记录。也许,最好使用有效? 保存