我正在测试'get'方法并收到错误:
预期:
[{\ “USER_ID \”:11,\ “USER_FIRST_NAME \”:\ “鲍勃\”,\ “user_last_name \”:\ “马利\”,\ “user_picture \”:\“/图片/缺失。 PNG \ “\ ”ID \“:2,\ ”文本\“:\” 我 第三次评论\“,\”date \“:\”2013-12-27T09:08:06.364Z \“}]
得到:
怎么了?为什么最后一个数字不同而其他所有字段都相同?[{\ “USER_ID \”:11,\ “USER_FIRST_NAME \”:\ “鲍勃\”,\ “user_last_name \”:\ “马利\”,\ “user_picture \”:\“/图片/缺失。 PNG \ “\ ”ID \“:2,\ ”文本\“:\” 我 第三次评论\“,\”date \“:\”2013-12-27T09:08:06.000Z \“}]
it "should return reviews for user" do
review = Review.create(reviewer_id: @user.id, user_id: @user2.id, text: 'my third review')
get 'get_reviews_for_user', user_id: @user2.id
expect(response).to be_success
json = JSON.parse(response.body)
expect(json['reviews'].to_json).to eq([{user_id: @user.id,
user_first_name: @user.first_name,
user_last_name: @user.last_name,
user_picture: @user.picture.url(:thumb),
id: review.id,
text: review.text,
date: review.created_at
}].to_json)
end
在控制器中:
def get_reviews_for_user
user = User.where(id: params[:user_id]).first
return render json: {success: false} if user.nil?
reviews = []
Review.where(user_id: user.id).each do |review|
reviewer = review.reviewer
reviews << {user_id: reviewer.id,
user_first_name: reviewer.first_name,
user_last_name: reviewer.last_name,
user_picture: reviewer.picture.url(:thumb),
id: review.id,
text: review.text,
date: review.created_at}
end
render json: { success: true, reviews: reviews }
end
答案 0 :(得分:4)
时间不同,因为当时间转换为JSON时,毫秒被截断。
答案 1 :(得分:3)
您可以使用Timecop冻结给定值的时间,如下所示:Timecop.freeze(Time.now)
。
您也可以使用这样的存根(在测试中):
allow(Review).to receive(:where).with(user_id: @user.id).and_return([review])
allow(review).to receive(:created_at).and_return(Time.now)