开发者

Another Rails 3 Tutorial Problem in Chapter 11.1

I can't get 3 of the tests to pass. Here are the failures:

Failures:
1) Users micropost associations should have a micropost attribute
 Failure/Error: @mp1 = Factory(:micropost, :user => @user, :created_at => 1.day.ago)
 Validation failed: User can't be blank
 # ./spec/requests/users_spec.rb:69:in `block (3 levels) in <top (required)>'

2) Users micropost associations should have the right microposts in the right order
 Failure/Error: @mp1 = Factory(:micropost, :user => @user, :created_at => 1.day.ago)
 Validation failed: User can't be blank
 # ./spec/requests/users_spec.rb:69:in `block (3 levels) in <top (required)>'

3) Users micropost associations should destroy associated microposts
 Failure/Error: @mp1 = Factory(:micropost, :user => @user, :created_at => 1.day.ago)
 Validation failed: User can't be blank
 # ./spec/requests/users_spec.rb:69:in `block (3 levels) in <top (required)>'

Any thoughts on where to look would be greatly appreciated. I'll post any code samples you need to help me track things down.

Thank you so much!

As per request, here is the user_spec.rb

require 'spec_helper'

describe "Users" do
describe "signup" do    
describe "failure" do

  it "should not make a new user" do
    lambda do
      visit signup_path
      fill_in "Name",         :with => ""
      fill_in "Email",        :with => ""
      fill_in "Password",     :with => ""
      fill_in "Confirmation", :with => ""
      click_button
      response.should render_template('users/new')
      response.should have_selector("div#error_explanation")
    end.should_not change(User, :count)
  end
end

describe "success" do
  it "should make a new user" do
    lambda do
      visit signup_path
      fill_in "Name",           :with => "Example User"
      fill_in "Email",          :with => "user@example.com"
      fill_in "Password",       :with => "foobar"
      fill_in "Confirmation",    :with => "foobar"
      click_button
      response.should have_selector("div.flash.success", :content => "Welcome")
      response.should render_template('users/show')
    end.should change(User, :count).by(1)
  end
end
end

describe "sign in/out" do

describe "failure" do

  it "should not sign the user in" do
    visit signin_path
    fill_in :email, :with => ""
    fill_in :password, :with => ""
    click_button
    response.should have_selector("div.flash.error", :content => "Invalid")
  end
end

describe "success" do

  it "should sign a user in and out" do
    user = Factory(:user)
    visit signin_path
    fill_in :email, :with => user.email
    fill_in :password, :with => user.password
    click_button
    controller.should be_signed_in
    click_link "Sign out"
    controller.should_not be_signed_in
  end
end
end

describe "micropost associations" do

before(:each) do
  @user = User.create(@attr)
  @mp1 = Factory(:micropost, :user => @user, :created_at => 1.day.ago)
  @mp2 = Factory(:micropost, :user => @user, :created_at => 1.hour.ago)
end

it "should have a micropost attribute" do
  @user.should respond_to(:microposts)
end

it "should have the right microposts in the right order" do
  @user.microposts.should == [@mp2, @mp1]
end

it "should destroy associated microposts" do
  @user.destroy
  [@mp1, @mp2].each do |micropost|
   开发者_开发技巧 Micropost.find_by_id(micropost.id).should be_nil
  end
end
end
end

And factories.rb:

Factory.define :user do |user|
user.name                     "JD Skinner"
user.email                    "jd.skinner@me.com"
user.password                 "password"
user.password_confirmation    "password"
end

Factory.sequence :email do |n|
"person-#{n}@example.com"
end

Factory.define :micropost do |micropost|
micropost.content "foo bar"
micropost.association :user
end

Thank you so much!!

-Kagi


Do your users need to be unique? If so...

Factory.define :user do |user|
  user.sequence(:name) { |n| "Test-#{n}" }
  user.sequence(:email) { |n| "test-user-#{n}@example.com" }
  user.password "password"
  user.password_confirmation "password"
end


I think Validation failed: User can't be blank, occurrence because you not defined (or defined with wrong values) @attr variable, in user_spec.rb

@user = User.create(@attr)

Try this instead

before(:each) do
  @user = Factory(:user)
  @mp1 = Factory(:micropost, :user => @user, :created_at => 1.day.ago)
  @mp2 = Factory(:micropost, :user => @user, :created_at => 1.hour.ago)
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜