0

我正在更改代码的某些部分,并且我的测试开始给出错误和警告。

然后我删除了这些测试,因为我无法修复它们。

但是后来我的另一个文件中的测试完全出错了。

以下是我的factories.rb文件:

FactoryGirl.define do
  factory :user do
    sequence(:name) { |n| "Person #{n}" }
    sequence(:surname) { |n| "Persona #{n}" }
    sequence(:email) { |n| "person_persona_#{n}@example.com.eu" }
    password  "foobar"
    password_confirmation "foobar"

    # factory :admin do
      # admin true
    # end

    factory :admin do
      role "admin"
    end

    factory :editor do
      role "editor"
    end

    factory :author do
      role "author"
    end

  end

  factory :course do
    sequence(:title) { |n| "Title #{n}" }
    sequence(:objectives) { |n| "Objectives #{n}" }
    user_id 1 
    subject_id 1
    student_level_id 1
  end

  factory :subject do
    title "French for Adults"
  end

  factory :student_level do
    title "Advanced"
  end



end

这是我的实际测试文件,models/course_spec.rb:

require 'spec_helper'

describe Course do
  let (:user) { FactoryGirl.create(:user) }
  let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
  let (:student_level) { FactoryGirl.create(:student_level) }

  before do
    # @course = Course.new(user_id: user.id, subject_id: subject_.id, student_level_id: student_level.id, 
                         # title: "French for Us", objectives: "Lorem ipsum")

    @course = user.courses.build(title: "French", objectives: "lorem")
    @course.subject = subject_
    @course.student_level = student_level
  end

  subject { @course }

  it { should respond_to(:user_id) }
  it { should respond_to(:subject_id) }
  it { should respond_to(:student_level_id) }
  it { should respond_to(:title) }
  it { should respond_to(:objectives) }
  it { should respond_to(:user) }
  its(:user) { should == user }

  it { should be_valid }

  describe "when user_id is not present" do
    before { @course.user_id = nil }
    it { should_not be_valid }
  end

  describe "when subject_id is not present" do
    before { @course.subject_id = nil }
    it { should_not be_valid }
  end

  describe "when student_level_id is not present" do
    before { @course.student_level_id = nil }
    it { should_not be_valid }
  end

  describe "when title is not present" do
    before { @course.title = "" }
    it { should_not be_valid }
  end

  describe "when title is too long" do
    before { @course.title = "a" * 251 }
    it { should_not be_valid }
  end


  describe "when title is already taken" do
    before do
      course_with_same_title = @course.dup
      course_with_same_title.title = @course.title.upcase
      course_with_same_title.save
    end

    it { should_not be_valid }
  end


  describe "when objectives are not present" do
    before { @course.objectives = "" }
    it { should_not be_valid }
  end

  describe "accessible attributes" do
    it "should not allow access user_id" do
      expect do
       Course.new(user_id: user.id)
      end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
    end

    # it "should not allow access subject_id" do
    #   expect do
    #    Course.new(subject_id: subject_.id)
    #   end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
    # end

    # it "should not allow access student_level_id" do
    #   expect do
    #    Course.new(student_level_id: student_level.id)
    #   end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
    # end

  end

end

这些是测试输出:

:~/ror/oy$ bundle exec rspec
...............................................................FFFFFFFFFFFFFFFF.................................................

Failures:

  1) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  2) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  3) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  4) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  5) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  6) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  7) Course 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  8) Course when user_id is not present 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  9) Course user 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  10) Course when title is already taken 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  11) Course when objectives are not present 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  12) Course accessible attributes should not allow access user_id
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  13) Course when title is too long 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  14) Course when subject_id is not present 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  15) Course when student_level_id is not present 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

  16) Course when title is not present 
     Failure/Error: let (:subject_) { FactoryGirl.create(:subject) } # "_" so that to differenciate from subject test directive
     ActiveRecord::RecordInvalid:
       translation missing: uzlt.activerecord.errors.messages.record_invalid
     # ./spec/models/course_spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./spec/models/course_spec.rb:27:in `block (2 levels) in <top (required)>'

Finished in 7.82 seconds
128 examples, 16 failures

Failed examples:

rspec ./spec/models/course_spec.rb:36 # Course 
rspec ./spec/models/course_spec.rb:37 # Course 
rspec ./spec/models/course_spec.rb:34 # Course 
rspec ./spec/models/course_spec.rb:35 # Course 
rspec ./spec/models/course_spec.rb:33 # Course 
rspec ./spec/models/course_spec.rb:41 # Course 
rspec ./spec/models/course_spec.rb:38 # Course 
rspec ./spec/models/course_spec.rb:45 # Course when user_id is not present 
rspec ./spec/models/course_spec.rb:39 # Course user 
rspec ./spec/models/course_spec.rb:76 # Course when title is already taken 
rspec ./spec/models/course_spec.rb:82 # Course when objectives are not present 
rspec ./spec/models/course_spec.rb:86 # Course accessible attributes should not allow access user_id
rspec ./spec/models/course_spec.rb:65 # Course when title is too long 
rspec ./spec/models/course_spec.rb:50 # Course when subject_id is not present 
rspec ./spec/models/course_spec.rb:55 # Course when student_level_id is not present 
rspec ./spec/models/course_spec.rb:60 # Course when title is not present 

Randomized with seed 44955

我想 factory.rb 文件有问题。但是我用其他分支上的相同文件检查了它,实际上没有任何变化。

这里有什么问题?

4

2 回答 2

2

我跑了

$ rake db:test:prepare

根据这个线程:突然所有 RSpec 测试都失败了? 一切正常。

于 2013-10-13T14:23:38.037 回答
1

我建议您检查以下内容

  • 架构,迁移:确保您的对象具有正确的属性
  • 模型验证:这是导致您的测试失败的主要原因。上次我遇到此invalid_record错误是因为验证错误
于 2013-10-13T14:22:31.187 回答