Ruby on rails Can';无法通过规格测试,因为在

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 第

我正在测试“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 \“}]

怎么回事?为什么最后的数字不同,而所有其他字段都相同

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)