Подтвердить что ты не робот

Rails Светильники не загружаются с rspec

Итак, я пытаюсь изучить структуру тестирования rspec BDD в контексте проекта рельсов. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу, для своей жизни, получить мои приспособления для правильной загрузки в описаниях rspec.

Отказ от ответственности: Да, есть лучшие вещи, чем использовать инструменты. Я пытаюсь изучить одну вещь за раз, здесь (в частности, rspec), прежде чем я начну играть со связанными инструментами вроде factory -girl, mocha, auto-test и т.д. Таким образом, я пытаюсь убить мертвых -простые, если неудобные, светильники работают.

В любом случае, здесь код:

/test/fixtures/users.yml -

# password: "secret"
foo:
  username: foo
  email: [email protected]
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

bar:
  username: bar
  email: [email protected]
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

/spec/controllers/pages_controller_spec.rb -

require 'spec/spec_helper'

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = user(:foo).id
    get 'index' 
    response.should render_template('index')
  end
end

И что я получаю, когда я запускаю "rake spec":

NoMethodError in 'PagesController should render index template on index call when logged in'
undefined method `user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0x2405a7c>
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/test_process.rb:511:in `method_missing'
./spec/controllers/pages_controller_spec.rb:7:

То есть, он не распознает "user (: foo)" как допустимый метод.

Сами приборы должны быть в порядке, поскольку, когда я загружаю их в db разработки через "rake db: fixtures: load", я могу проверить, что foo и bar присутствуют в этом db.

Я чувствую, что мне не хватает чего-то очевидного здесь, но я весь разрывал свои волосы весь день безрезультатно. Любая помощь будет оценена.

4b9b3361

Ответ 1

Если вы определяете атрибуты как "пользователи", то способ их использования - с помощью метода с тем же именем:

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = users(:foo).id
    get 'index'
    response.should render_template('index')
  end
end

Единственное значение относится только к самому классу (Пользователь). Надеюсь, что у вас все еще есть волосы, если это всего лишь ошибка с одной буквой.

Ответ 2

Если вы хотите настроить свои приборы по всему миру, внутри spec_helper или rails_helper вы можете добавить:

RSpec.configure do |config|
  config.global_fixtures = :all
end