0

我正在尝试测试用户已成功创建的注释显示在用户的个人页面上。但是,每当我运行测试时,我都会遇到折旧错误,并且由于未定义用户而导致测试无法正常运行。

user_page_spec.rb

let (:user) { FactoryGirl.create(:user) }


 describe "user note list" do
  before(:all) { 10.times { FactoryGirl.create(:note, user: user) } }
  after(:all) { Note.delete_all }

工厂.rb

FactoryGirl.define do 
 factory :user do
   name "JowJebus"
   provider "twitter"
   uid "123456"

//matches omniauth fake user


factory :note do
  sequence(:title) { |n| "Note_#{n}" }
  sequence(:content) { |n| "Lorem ipsum ..... #{n}" }
  user

结果错误:

undefined method 'notes' for nil:NilClass

和折旧误差

This is deprecated behavior that will not be supported in RSpec 3.

'let' and 'subject' declarations are not intended to be called
in a 'before(:all)' hook, as they exist to define state that...

所以很明显我要让用户不正确地进行这个测试,如何正确地做到这一点?

谢谢。

注意:我正在测试的东西确实有效。我只需要帮助正确地对其进行测试。

4

1 回答 1

0

警告是因为 let 关键字旨在用于事务上下文,而 before(:all) 是事务外范围。

完整的信息对此非常清楚:

let and subject declarations are not intended to be called
in a `before(:all)` hook, as they exist to define state that
is reset between each example, while `before(:all)` exists to
define state that is shared across examples in an example group.

before(:all)您可以使用,或更改before(:each), 或:

before(:all) do
  user = FactoryGirl.create(:user)
  10.times do
    FactoryGirl.create(:note, user: user)
  end
end

这也应该有效。

于 2013-08-14T08:26:18.487 回答