我是 Rails 和序列化程序的新手。我正在使用活动模型序列化程序 gem 进行序列化。
其中一个属性使用设计辅助方法“current_user”。它工作正常。但是在使用 rspec 运行规范时,我得到一个错误未定义的局部变量或方法“current_user”。请谁能帮我解决这个问题?
我正在使用 rails 3.2 和 rspec 2
我是 Rails 和序列化程序的新手。我正在使用活动模型序列化程序 gem 进行序列化。
其中一个属性使用设计辅助方法“current_user”。它工作正常。但是在使用 rspec 运行规范时,我得到一个错误未定义的局部变量或方法“current_user”。请谁能帮我解决这个问题?
我正在使用 rails 3.2 和 rspec 2
这个问题很老,但我遇到了同样的问题,虽然已经在使用 Devise Helpers。
我使用 Ruby on Rails 4.2、Rspec 3.5、Active Model Serializers 0.8.3。
我在 Rspec 中包含了 Devise::Test::ControllerHelpers,并且可以sign_in
在我的规范文件中使用,但是NameError: undefined local variable or method 'current_user'
在调用依赖于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
我修改了测试,使用选项scope
和scope_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
首先你应该include Devise::TestHelpers
在你的 rspec 文件中加入lcdue,然后你应该创建一个用户并登录它。像这样的代码:
@user = create(:user)
sign_in @user