【发布时间】:2014-06-26 16:30:55
【问题描述】:
我正在使用 RSpec 来测试我的嵌套控制器。我已经登录了 current_user (在我的例子中是成员),它正在返回一个不同的实例。请看下面:
规格sn-p:
before :each do
@request.env["devise.mapping"] = Devise.mappings[:member]
@member = create(:member)
sign_in @member
@calendar = @member.calendars.create!({"name" => "test"}, Calendars::Native)
end
it "creates a new Event" do
puts "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
puts @member
puts @calendar
puts @calendar.events.count
puts "->->->->->->->->->->->->->->->->->->->->->->->->->->->-"
post :create, {:native_id => @calendar.id, :event => valid_attributes}, valid_session
puts "<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<"
puts @member
puts @calendar
puts @calendar.events.count
puts "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
expect {
post :create, {:native_id => @calendar.to_param, :event => valid_attributes}, valid_session
}.to change(@calendar.events, :count).by(1) #Event, :count).by(1)
end
控制器片段
def create
set_calendar
@event = @calendar.events.build(event_params)
respond_to do |format|
if @event.save
puts "DID SAVE"
puts @member
puts @calendar
puts @event
format.html { redirect_to native_event_url(:native_id => @calendar.id, :id => @event.id), notice: 'Event was successfully created.' }
format.json { render action: 'show', status: :created, location: @event }
else
format.html { render action: 'new' }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def set_calendar
@member = current_member
@calendar = @member.calendars.find(params[:native_id])
end
控制台输出:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#<Member:0x007fb5a6e4fda0>
#<Calendars::Native:0x007fb5a495bf58>
0
->->->->->->->->->->->->->->->->->->->->->->->->->->->-
DID SAVE
#<Member:0x007fb5a49a1aa8>
#<Calendars::Native:0x007fb5a49a0810>
#<Event:0x007fb5a49b3eb0>
<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
#<Member:0x007fb5a6e4fda0>
#<Calendars::Native:0x007fb5a495bf58>
0
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
如您所见... Member objectId 不同,导致 Rspec 测试失败,因为 count 没有改变。
有什么好的建议吗?怎么回事?
谢谢!!
【问题讨论】:
-
我忘了说我正在使用 MongoId 并且事件嵌入在日历中。可能这就是
Event, :count不起作用的原因。
标签: ruby-on-rails rspec devise controllers