【问题标题】:How to use current_user for serializer testing in rspec如何在 rspec 中使用 current_user 进行序列化程序测试
【发布时间】:2016-10-12 19:11:02
【问题描述】:

我是 Rails 和序列化程序的新手。我正在使用活动模型序列化程序 gem 进行序列化。

其中一个属性使用设计辅助方法“current_user”。它工作正常。但是在使用 rspec 运行规范时,我得到一个错误未定义的局部变量或方法“current_user”。请谁能帮我解决这个问题?

我正在使用 rails 3.2 和 rspec 2

【问题讨论】:

标签: ruby-on-rails-3 devise rspec2 serialization


【解决方案1】:

这个问题很老,但我遇到了同样的问题,虽然已经在使用 Devise Helpers。

我使用 Ruby on Rails 4.2、Rspec 3.5、Active Model Serializers 0.8.3。

我在 Rspec 中包含了 Devise::Test::ControllerHelpers,并且可以在我的规范文件中使用 sign_in,但在调用依赖于 current_user 的序列化程序方法时我有 NameError: undefined local variable or method 'current_user'。请注意,控制器使用current_user 很好。

这是规范文件(不工作):

describe ArticleController do
  before :each do 
    @article = create(:article)
  end
  describe 'PUT #update' do
    context "as user" do
      before :each do 
        @u = create(:user)
        sign_in @u
      end

      it 'sets the seen status' do
        put :update, id: @article, article: { seen: true }
        expect(ArticleSerializer.new(@article.reload).seen).to eq(true)
      end
    end
  end
end

和序列化器:

class ArticleSerializer < ActiveModel::Serializer
  attributes :id, :text, :seen

  def seen
    object.article_user_seen.find_by( user_id: current_user.id ).try(:seen) || false
  end

end

我在创建序列化程序实例时使用选项scopescope_name 修改了测试。感谢本指南:https://github.com/rails-api/active_model_serializers/blob/master/docs/general/serializers.md

下面的工作测试:

describe ArticleController do
  before :each do 
    @article = create(:article)
  end
  describe 'PUT #update' do
    context "as user" do
      before :each do 
        @u = create(:user)
        sign_in @u
      end

      it 'sets the seen status' do
        put :update, id: @article, article: { seen: true }
        expect(ArticleSerializer.new(@article.reload, scope: @u, scope_name: :current_user).seen).to eq(true)
      end
    end
  end
end

【讨论】:

    【解决方案2】:

    首先你应该在你的rspec文件中加入include Devise::TestHelpers,然后你应该创建一个用户并登录它。像这样的代码:

    @user = create(:user)

    sign_in @user

    【讨论】:

    • 现在它显示失败/错误:sign_in @user NoMethodError: undefined method `env' for nil:NilClass
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2016-11-22
    • 2018-02-21
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多