【问题标题】:Testing a rails controller method that is designed to change data of a variable测试旨在更改变量数据的rails控制器方法
【发布时间】:2013-05-17 00:10:13
【问题描述】:

我在控制器中有以下代码:

# guest to user sign up view. Method that prepares a guest to become a user by emptying it's generic
#e-mail address.
def guest_signup
  if !current_user.guest
    redirect_to root_url
  end
  @user = current_user
  @user.email = ""
end

此控制器只是确保结果(表单)在用户以访客身份使用应用程序时分配的输入字段中没有通用电子邮件地址。

我正在尝试为它编写一个 rspec 测试,但我不知道如何正确执行它...我知道这听起来像是开发驱动的测试,而不是相反,但我需要一个想法。 目前我有这个不起作用:

require 'spec_helper'

describe UsersController do
  describe "Guest Signup" do
    it "should prepare guest with random e-mail user for signup form, emptying the e-mail" do
      current_user = User.create(:email => "guest_#{Time.now.to_i}#{rand(99)}@example.com", :password => "#{Time.now.to_i}#{rand(99999999)}", :guest => true)
      get :guest_signup, :user => @user.id
      expect(@user.email).to eq ('')
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby testing rspec tdd


    【解决方案1】:

    @user 这里是怎么分配的?大概是在调用guest_signup 方法之后。由于在对guest_signup 的调用中引用了@user,因此这里存在操作顺序问题。

    也许你应该打电话:

    get :guest_signup, :user => current_user.id
    

    【讨论】:

      【解决方案2】:
      describe UsersController do
        describe 'Guest Signup' do
      
          let(:user) { mock.as_null_object }
          before(:each) { controller.stub(:current_user) { user } }
      
          context 'when guest does not exist' do
      
            before(:each) { user.stub(:guest) { false } }
      
            it 'redirects to root path' do
              get :guest_signup
              response.should redirect_to root_path
            end
          end
      
          context 'when guest exists' do
      
            before(:each) { user.stub(:guest) { true } }
      
            it 'should prepare guest with random e-mail user for signup form, emptying the e-mail' do
              get :guest_signup
              assigns(@user).should == user
              assigns(@email).should be_empty
            end
          end
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多