"范围值不好"在rspec /萝卜中提出

时间:2014-10-10 15:31:24

标签: ruby-on-rails ruby rspec

我使用萝卜进行测试。

我写了以下测试:

session = ActionDispatch::Integration::Session.new(Rails.application)
str = "Basic " + Base64.strict_encode64("#{@token}:#{@secret}")
session.get "/api/v1/recommend/#{n}", nil, {"Authorization" => str}

我使用了ActionDispatch :: Integration :: Session.new(Rails.application),因为萝卜不支持get

@token和@secret是token和token_secret的值,我确认这些值是有效的 n在论证中给出。

接下来,我运行它并发生了这些错误:

Failures:

  1) test
     Failure/Error: test1
     ArgumentError:
       bad value for range
     # ./spec/features/recommendation.feature:13:in `test1'
     # ./app/models/user.rb:682:in `recommendation'
     # ./app/controllers/api/v1/users_controller.rb:209:in `recommendation'
     # spec/steps/recommendation_steps.rb:32:in `block (2 levels) in <top (required)>'
     # ./spec/features/recommendation.feature:14:in `block (6 levels) in run'
     # ./spec/features/recommendation.feature:13:in `each'
     # ./spec/features/recommendation.feature:13:in `block (5 levels) in run'
     # -e:1:in `<main>'

我尝试了以下案例并确认他们是成功的。

  1. 在rails console中执行相同的操作
  2. 制作一个虚拟编码字符串并使用它(当然认证失败,但没有错误)
  3. 为什么会出现这样的错误?

    (添加)

    ./app/models/user.rb:682:in recommendation

      def recommendation limit = 10
        result = Hash.new{0.0}
        unused_recipe_ids = Recipe.where.not(id: self.made_recipes.pluck(:id)).pluck(:id)
        self.made_activities.includes(:recipe).each do |activity|
          c = coefficient(activity)
          similarities = RecipeSimilarity.where(from_recipe_id:           activity.recipe.id).where(to_recipe_id: unused_recipe_ids)
          similarities.each { |s| result[s.to_recipe_id] += s.score * c }
        end
        Recipe.where(id: result.sort{|a, b| b[1] <=> a[1]}[0...limit].map{|r| r[0]})
      end
    
      def coefficient activity
        return 1.5 if activity.type_code == 301
        return 0.5 if activity.type_code == 302
        if activity.type_code == 100
          return 1.0 if activity.evaluation == 0
          return 0.1 if activity.evaluation == 1
          return 0.6 if activity.evaluation == 2
          return 1.1 if activity.evaluation == 3
          return 1.6 if activity.evaluation == 4
          return 2.5 if activity.evaluation == 5
        end
        return 1.0
      end
    

    ./app/controllers/api/v1/users_controller.rb:209:in recommendation

      def recommendation
        @recipes = @current_user.recommendation(params[:limit])
        render text: @recipes.to_json
      end
    

    Recipe.count是50 RecipeSimilarity.count是2500。

0 个答案:

没有答案