Ruby on rails Can';无法通过规格测试,因为在
我正在测试“get”方法并得到错误: 预期: [{“用户id\”:11、“用户名”:“bob\”、“用户姓氏”:“marley\”、“用户图片”:“/images/missing.png\”、“id\”:2、“文本”:“my 第三次审查\“,日期\:\“2013-12-27T09:08:06.364Z\”] 得到: [{“用户id\”:11、“用户名”:“bob\”、“用户姓氏”:“marley\”、“用户图片”:“/images/missing.png\”、“id\”:2、“文本”:“my 第三次审查\“,”日期\“:\”2013-12-27T09:08:06.000Z \“}] 怎么回事?为什么最后的数字不同,而所有其他字段都相同Ruby on rails Can';无法通过规格测试,因为在,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在测试“get”方法并得到错误: 预期: [{“用户id\”:11、“用户名”:“bob\”、“用户姓氏”:“marley\”、“用户图片”:“/images/missing.png\”、“id\”:2、“文本”:“my 第三次审查\“,日期\:\“2013-12-27T09:08:06.364Z\”] 得到: [{“用户id\”:11、“用户名”:“bob\”、“用户姓氏”:“marley\”、“用户图片”:“/images/missing.png\”、“id\”:2、“文本”:“my 第
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
def get_reviews_供用户使用
user=user.where(id:params[:user\u id])。首先
返回呈现json:{success:false}如果user.nil?
评论=[]
Review.where(user_id:user.id)。每个do|Review|
reviewer=review.reviewer
查看您可以使用将时间冻结为如下给定值:Timecop.freeze(time.now)
您也可以使用这样的存根(在您的测试中):
您可以使用将时间冻结为如下给定值:Timecop.freeze(time.now)
您也可以使用这样的存根(在您的测试中):
时间是不同的,因为将时间转换为JSON时毫秒被截断。时间是不同的,因为将时间转换为JSON时毫秒被截断。请为控制器中的用户操作添加get\u reviews\u的代码。请,为控制器的get\u reviews\u用户操作添加代码。好吧,看起来你是对的:)但为什么有时“得到”有时“预期”时间会变短?不总是“得到”。。MagicIf“get”总是通过JSON获得的,我无法解释为什么它不总是被截断。如果值是作为保存JSON的结果创建的,则Expected可能会被截断,当然,它自然有1/1000的几率为0毫秒。当second可以是任意数字时,一个值始终为000。我还有另一个测试,答案也是JSON,比较结果是一样的,但预期中有正确的“get”数字和000。知道JSON截断后,我建议将您的“反例”作为一个单独的问题提出。好的,看起来你是对的:)但为什么有时“得到”和有时“预期”的时间变得拥挤?不总是“得到”。。MagicIf“get”总是通过JSON获得的,我无法解释为什么它不总是被截断。如果值是作为保存JSON的结果创建的,则Expected可能会被截断,当然,它自然有1/1000的几率为0毫秒。当second可以是任意数字时,一个值始终为000。我还有另一个测试,答案也是JSON,比较结果是一样的,但预期中有正确的“get”数字和000。鉴于JSON截断的知识,我建议将您的“反例”作为一个单独的问题提出。
allow(Review).to receive(:where).with(user_id: @user.id).and_return([review])
allow(review).to receive(:created_at).and_return(Time.now)