【问题标题】:failed to test create action未能测试创建操作
【发布时间】:2011-04-20 06:27:59
【问题描述】:

我正在使用 ruby​​ 1.9.2 和 rails 3.0.6, 该应用程序正在浏览器上运行,但未在测试中..

1)我通过“rails new myapp”创建了一个新的rails应用程序

2) 生成脚手架“rails generate scaffold user username:string hashed_pa​​ssword:string salt:string”

3) 在那之后,我稍微改变了 users_controller

  # POST /users
  # POST /users.xml
  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        // change @user to usrs_url
        format.html { redirect_to(users_url, :notice => "User #{@user.username} was successfully created.") }
        format.xml  { render :xml => @user, :status => :created, :location => @user }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /users/1
  # PUT /users/1.xml
  def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        // change @user to usrs_url
        format.html { redirect_to(users_url, :notice => "User #{@user.username} was successfully updated.") }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

4) 所以我也尝试修改测试:

 setup do
    @input_attributes = {
        :username               => 'username@goodmail.com',
        :password               => 'secret',
        :password_confirmation  => 'secret'
    }

    @user = users(:one)
  end

  test "should create user" do
    assert_difference('User.count') do
      post :create, :user => @input_attributes
    end

    assert_redirected_to users_path
  end

  test "should update user" do
    put :update, :id => @user.to_param, :user => @input_attributes
    assert_redirected_to users_path
  end

但创建和更新测试失败

谁能告诉我我做错了什么?

谢谢

Loaded suite C:/Ruby192/lib/ruby/1.9.1/rake/rake_test_loader
Started
F.....F
Finished in 5.628874 seconds.

  1) Failure:
test_should_create_user(UsersControllerTest) [test/functional/users_controller_test.rb:26]:
"User.count" didn't change by 1.
<3> expected but was
<2>.

  2) Failure:
test_should_update_user(UsersControllerTest) [test/functional/users_controller_test.rb:45]:
Expected block to return true value.

7 tests, 9 assertions, 2 failures, 0 errors, 0 skips



require 'digest/sha2'
class User < ActiveRecord::Base
    validates :username, :presence => true, :uniqueness => true

    validates_format_of :username, :with => /\A^[^\r\n@ ][^\r\n@ ]+@[^\r\n@ ]+[.][^\r\n@. ]+$\Z/i

    #password is a fake field
    validates :password, :confirmation => true
    validate :password_must_be_present

    attr_accessor :password_confirmation
    attr_reader :password

    def password=(password)
        if password.present?
            generate_salt
            self.hashed_password = self.class.encrypt_password(password, salt)
        end
    end

    class << self
        def encrypt_password(password, salt)
            Digest::SHA2.hexdigest(password + "shrimpy" + salt)
        end

        def authenticate(username, password)
            if user = find_by_username(username)
                if user.hashed_password == encrypt_password(password, user.salt)
                    user
                end
            end
        end
    end

    private
        def password_must_be_present
            errors.add(:password, "Missing password") unless hashed_password.present?
        end

        def generate_salt
            self.salt = self.object_id.to_s + rand.to_s
        end
end

【问题讨论】:

    标签: ruby-on-rails-3 functional-testing


    【解决方案1】:

    assert_redirected_to user_path 是单数。您甚至可能没有定义单个 user 资源路由。你想要的可能是 assert_redirected_to users_path 和复数 users

    【讨论】:

    • 你是对的......多么敏锐的眼睛。我的拼写错误......它应该是 users_path......我修复了它......但问题仍然存在......无法通过测试运行
    • @shrimpy:看起来你正在混合和匹配users_pathusers_url。我不确定,但我敢打赌assert_redirected_to 只是比较来自url_for 的字符串输出,因为它没有请求/主机名的上下文来从路径构建完整的URL。试一试……值得以一种或另一种方式解决。
    • 这不是问题t work for me.... back to the error message, it complain about not able to save record and update record into database.... but i used sqlite3...hmm..shouldnt ......困惑......
    • 您的应用程序工作正常吗?如果您遇到错误,您应该分享它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多