【问题标题】:Rspec Unit Testing for self.from_omniauth(auth)self.from_omniauth(auth) 的 Rspec 单元测试
【发布时间】:2014-07-29 18:41:39
【问题描述】:
  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |partner|
      partner.provider = auth.provider
      partner.uid = auth.uid
      partner.email = auth.info.email      || ''
      partner.lastname = auth.info.last_name  || ''
      partner.firstname = (auth.provider == "twitter") ? auth["info"]["name"] : auth.info.first_name
      partner.oauth_token = auth.credentials.token || ''
      partner.oauth_expires_at = Time.at(auth.credentials.expires_at) if auth.provider == "facebook"
      partner.auth_token = partner.auth_token.present? ? partner.auth_token : ''
      partner.company_api_access = partner.company_api_access.present? ? partner.company_api_access : "In Progress"
      partner.save(:validate => false)
    end
  end

这是我要添加 Rspect 单元测试的 from_omniauth 方法,那么我该怎么做呢?

我搜索了很多东西,但也包括我不想要的控制器。

我只是想测试一个方法,我该怎么做?

请帮帮我

谢谢

【问题讨论】:

    标签: ruby-on-rails-3 rspec capybara rspec-rails


    【解决方案1】:

    这绝不是最干净的解决方案,但由于这个问题已经提出了一年没有答案,我会发布它。这基本上是您应该尝试做的事情。此示例适用于 facebook,但对于其他提供商应该类似。

    auth_hash = OmniAuth::AuthHash.new({
      :provider => 'facebook',
      :uid => '1234',
      :info => {
        :email => "user@example.com",
        :name => "Justin Bieber"
      }
    })
    
    describe User, "#from_omniauth" do
        it "retrieves an existing user" do
            user = User.new(
                :provider => "facebook", 
                :uid => 1234,
                :email => "user@example.com",
                :password => 'password', 
                :password_confirmation => 'password'
                )
            user.save
            omniauth_user = User.from_omniauth(auth_hash)
    
            expect(user).to eq(omniauth_user)
      end
    
      it "creates a new user if one doesn't already exist" do
        expect(User.count).to eq(0)
    
        omniauth_user = User.from_omniauth(auth_hash)
        expect(User.count).to eq(1)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 2012-11-28
      相关资源
      最近更新 更多