railstutorial.org - 6.11 - сбой rspec, является ли проблема postgresql? - PullRequest
0 голосов
/ 03 апреля 2012

Я прохожу учебник по рельсам и нахожусь в разделе 6.11

По какой-то причине я получаю 4 примера и 4 ошибки в rspec против 4 примеров и 1 ошибку (и, следовательно, 0), как в учебнике.

Я вижу это в моем rspec:

Failure/Error: @user = User.new(name: "Example User", email: "user@example.com")
     ActiveRecord::StatementInvalid:
       PGError: ERROR:  relation "users" does not exist

Дело в том, что учебник идет по sqlite, но я перешел на postgres (как предлагалось в учебнике ранее), чтобы я мог также узнать о postgres. Это то, что вызывает проблемы? Разве activerecord не должен делать ее прозрачной относительно того, какую базу данных я использую?

Я создал правильные базы данных, обновил свой database.yml, запустил db: mgirate и команду

User.new(name: "Example User", email: "user@example.com")

отлично работает в изолированной консоли.

Любая помощь с благодарностью. Я пытаюсь остаться на вершине rspec здесь, для меня это самая сложная часть в изучении Rails. Такое ощущение, что вместо этого тратят 90% энергии на написание и отладку. (Единственным камнем преткновения / головокружительного головного мозга, с которым я столкнулся, были тесты rspec)

user_rspec.rb:

require 'spec_helper'

describe User do

  before do
    @user = User.new(name: "Example User", email: "user@example.com")
  end

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }

  it { should be_valid }

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

-

В качестве дополнительного вопроса я обнаружил, что мои тесты rspec выполняются несколько раз? Я установил гем ruby-gntp и обнаружил, что рычание появляется несколько раз при каждом запуске теста с той же информацией.

rspec multiple times

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

ОК, я разобрался.

Проблема заключалась в том, что база данных разработки не переносилась в тестовую базу данных, даже при запуске rake db: migrate, rake db: rollback и затем перенос, rake db:сброс.

Решение было клонировать базу данных:

bundle exec rake db:test:prepare
0 голосов
/ 09 мая 2013

У меня были такие же обстоятельства - переход с SQLite на PG.После переустановки PG - у меня началось 20 сбоев rspec - вокруг пользователей.После нескольких часов разочарования - одна команда все исправила:

rake db: test: prepare или bundle exec rake db: test: prepare (в зависимости от ваших настроек)

Ruby Guides - упоминает об этом тоже - http://guides.rubyonrails.org/testing.html

Когда вы закончите уничтожать свою тестовую базу данных (и это произойдет, поверьте мне), вы можете восстановитьэто с нуля в соответствии со спецификациями, определенными в базе данных разработки.Вы можете сделать это, запустив rake db: test: prepare.

...