Json Rspec收到意外消息:[]带有
我编写了一个映射程序,匹配从facebook接收到的属性,并将它们设置到我的模型中Json Rspec收到意外消息:[]带有,json,facebook-graph-api,ruby-on-rails-3.2,rspec2,Json,Facebook Graph Api,Ruby On Rails 3.2,Rspec2,我编写了一个映射程序,匹配从facebook接收到的属性,并将它们设置到我的模型中 class Mapper::FacebookUser def initialize (user, facebook_user) @user = user @facebook_user = facebook_user end def name @user.name = @facebook_user['name'] if @facebook_user['name'] rescu
class Mapper::FacebookUser
def initialize (user, facebook_user)
@user = user
@facebook_user = facebook_user
end
def name
@user.name = @facebook_user['name'] if @facebook_user['name'] rescue false
end
end
Facebook的回应是这样的:(JSON)
我的用户规格是:
require 'spec_helper.rb'
describe Mapper::FacebookUser do
before(:each) do
@facebook_user = double("FacebookUser")
@user = User.new
end
it 'should map name to name' do
@facebook_user.stub(:name).and_return("User Name")
Mapper::FacebookUser.new(@user, @facebook_user).name
@user.name.should eq("User Name")
end
end
RSpec::Mocks::MockExpectationError:收到两个“Facebook”
意外消息:[]带有(“名称”)
我尝试了以下方法:
@facebook_user.stub(:name).and_return("User Name")
@facebook_user.stub("name").and_return("User Name")
@facebook_user.stub(:[]).and_return({name: "User Name"})
@facebook_user.stub(:[]).and_return({name: "User Name"}.to_json)
只有这一种有效,但我很确定,不是这样的:
@facebook_user.stub(:[]).and_return("User Name")
我的方法有什么问题?
我怎样才能让我的测试正常进行
非常感谢
我使用rspec:
- rspec(2.14.1)
- rspec核心(2.14.7)
- rspec预期(2.14.4)
- rspec模拟(2.14.4)
- rspec导轨(2.14.0)
@facebook\u event
,所以我不确定您是否在存根。如果您想在名称
方法中存根您正在使用的对象/方法,您需要在@facebook\u用户
调用时传递的对象上存根:[]
方法。您得到错误的原因是您没有截取该方法
我假设您使用@facebook\u事件
存根尝试的一种方法是有效的,因为真正的映射器::facebook用户#[]
方法以这种方式调用该对象。我的方法现在是
我希望这对某人有帮助
facebook_user = { "name": "Jo Doe" }
class Mapper::FacebookUser
def initialize (user, facebook_user={})
@user = user # AR model
# allows ['key'] or [:keys]
@facebook_user = facebook_user.with_indifferent_access
end
def name
@user.name = @facebook_user.dig('name') # sets to nil if not present (works also with chains) >= Ruby 2.3
end
end
require 'spec_helper.rb'
describe Mapper::FacebookUser do
before(:each) do
@user = User.new
@facebook_user = {}
end
it 'should map name to name' do
@facebook_user['name']
Mapper::FacebookUser.new(@user, @facebook_user).name
@user.name.should eq("User Name")
end
end
嗨,彼得,谢谢你关注我的问题。我编辑了我的帖子,我有一个复制粘贴错误,我很抱歉。我从未使用过
@facebook\u事件
,我将它们改为@facebook\u用户
。我希望现在更清楚。即使进行了更改,您仍然有一个问题,即您已经删除了name
方法,但是您在代码中使用了[]
方法,正如我在回答中指出的那样。
facebook_user = { "name": "Jo Doe" }
class Mapper::FacebookUser
def initialize (user, facebook_user={})
@user = user # AR model
# allows ['key'] or [:keys]
@facebook_user = facebook_user.with_indifferent_access
end
def name
@user.name = @facebook_user.dig('name') # sets to nil if not present (works also with chains) >= Ruby 2.3
end
end
require 'spec_helper.rb'
describe Mapper::FacebookUser do
before(:each) do
@user = User.new
@facebook_user = {}
end
it 'should map name to name' do
@facebook_user['name']
Mapper::FacebookUser.new(@user, @facebook_user).name
@user.name.should eq("User Name")
end
end