2014-11-05 5 views
0

Я преподаю RSpec (v3.1.7). Я установил rspec с rails g rspec:install в существующее приложение rails - только что созданное.RSpec Модель Тестирование: сбои

Я создал модель: rails g rspec:model zombie. Ранняя миграция, и все прошло хорошо.

В: приложение/модели/zombie.rb:

class Zombie < ActiveRecord::Base 
    validates :name, presence: true 
end 

В: приложение/спецификации/модели/zombie_spec.rb:

require 'rails_helper' 

RSpec.describe Zombie, :type => :model do 
    it 'is invalid without a name' do 
    zombie = Zombie.new 
    zombie.should_not be_valid 
    end 
end 

В терминале, когда я побежал (в приложении реж): rspec spec/models я получаю:

F 

Failures: 

1) Zombie is invalid without a name 
Failure/Error: zombie.should_not be_valid 
NoMethodError: 
    undefined method `name' for #<Zombie id: nil, created_at: nil, updated_at: nil> 
# ./spec/models/zombie_spec.rb:6:in `block (2 levels) in <top (required)>' 

Im после видеоурок и я последовал за видео (тестирование с RSpec) вниз к Latt э. Мне нравится потерять вес во второй главе. Я что-то упускаю? Является ли видео с использованием старой версии rspec для своего видеоурока?

В моей миграции файла:

class CreateZombies < ActiveRecord::Migration 
    def change 
    create_table :zombies do |t| 

     t.timestamps 
    end 
    end 
end 
+0

Я создал 'attr_accessor: name' и это работает да. Но у видео нет attr_accessor! Я потерян! – Sylar

+0

Проверьте эти две ссылки: http://guides.rubyonrails.org/migrations.html#using-the-change-method adn http://guides.rubyonrails.org/migrations.html#running-migrations-in-different- Окружающая среда – jyrkim

ответ

0

Ваша модель не знаю, что name это, так как вы не определили атрибут в вашей миграции:

class CreateZombies < ActiveRecord::Migration 
    def change 
    create_table :zombies do |t| 
     t.string :name 
     t.timestamps 
    end 
    end 
end 

Затем запустите:

rake db:migrate 

Тогда это должно работать нормально:

z = Zombie.new(name: 'foo') 
z.name 
=> 'foo' 
+0

Ничего не работает. Я попробовал добавить имя таблицы, прежде чем задавать вопрос, но то же самое. – Sylar

+0

Ну попробуй больше, потому что это проблема –

0

Я думаю, что вам не хватает атрибута имени. Следующий файл миграции добавит имя атрибута для зомби модели:

class AddNameToZombies < ActiveRecord::Migration 
    def change 
    add_column :zombies, :name, :string 
    end 
end 

, наконец, запустить следующие команды:

rake db:migrate 

rake db:test:prepare 

и это его

Смежные вопросы