рельсы 3.2 и вопросы машиниста - PullRequest
1 голос
/ 09 февраля 2012

Я только что обновился до Rails 3.2.1 с Ruby 1.9.3-p0, и я использую Machinist 2.0.Перед обновлением большого проекта все мои тесты пройдены.Проблема, с которой я сталкиваюсь, заключается в том, что в своих тестах rspec я создаю проект в рамках вызова let, а затем ссылаюсь на него в блоке before do.получить следующую ошибку:

  1) PostsController GET index assigns all posts as @posts
     Failure/Error: let (:new_post) {Post.make!}
     NoMethodError:
       undefined method `title=' for nil:NilClass
     # ./spec/support/blueprints.rb:22:in `block in <top (required)>'
     # ./spec/controllers/posts_controller_spec.rb:37:in `block (2 levels) in <top (required)>'
     # ./spec/controllers/posts_controller_spec.rb:40:in `block (2 levels) in <top (required)>'

Вот мой план:

require 'machinist/active_record'
Post.blueprint do
  title {"Post"}
  body {"hello world"}
end

На данный момент моя работа заключается в создании их с использованием переменных экземпляра в блоке before do, но это будетприятно использовать вызовы 'let', так как это делает мои тесты rspec более чистыми.

1 Ответ

0 голосов
/ 21 февраля 2012

Забавно, я только что столкнулся с точно такой же проблемой, хотя я на Rails 3.2.1, Machinist 2.0 и ruby ​​1.9.2-p290.Я думаю, что есть конфликт между выполнением метода-заглушки Post.stub(:new) и метода Machinist make, но я не копался в коде.

Лучшее решение, которое я придумал, это:

  before do
    new_post
    Post.stub!(:new).and_return(new_post)
  end

Это инициализирует let (так как let загружается лениво в rspec), прежде чем он перейдет к методу-заглушке.Это глупо, но, по крайней мере, вы (и я) можете держать оператор let.

...