【问题标题】:active_model_serializer + devise + rspecactive_model_serializer + 设计 + rspec
【发布时间】:2014-11-26 20:07:03
【问题描述】:

我在使用序列化程序 (Rspec) 处理我的请求时遇到了 undefined method 'authenticate' for nil:NilClass

api/users_controller_spec.rb

require 'rails_helper'

describe Api::V1::UsersController, type: :controller do
  describe "GET #show" do
    context "with valid credentials" do
      let!(:application) { create(:doorkeeper_application) } # OAuth application
      let!(:user)        { create(:user) }
      let!(:token)       { create(:doorkeeper_access_token, application_id: application.id, resource_owner_id: user.id) }
      before do
        allow(controller).to receive(:doorkeeper_token) {token}
      end

      context 'and valid request' do
        before(:each) do
          get :show, format: :json
          @json = JSON.parse(response.body)
        end

        it "returns the user with 'id'" do
          expect(@json["id"]).to_not be_nil
        end
      end
    end
  end
end

serializers/user_serializer.rb

class UserSerializer < ActiveModel::Serializer
  attributes :id, :uid, :name, :email
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec devise active-model-serializers


    【解决方案1】:

    原来我需要的只是将serialization_scope :view_context 添加到我的ApplicationController,但我只是在观看关于宝石的精彩 Railcast 时才发现它:http://railscasts.com/episodes/409-active-model-serializers?view=asciicast

    已编辑

    不要使用 active_model_serializer > 0.9.x 否则它会在生产中中断。 https://github.com/rails-api/active_model_serializers/commit/0d31e72d2211b6bf7f0b0420139c4b370d6e986e https://github.com/rails-api/active_model_serializers/issues/139

    【讨论】:

    • 谢谢!这在我的 Rails 4.2.1 项目中对我有用。奇怪的是我不需要在我的 Rails 5 项目中设置它。 ://
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多