Ruby on rails Rails测试:运行时错误:can';不要修改冻结字符串

Ruby on rails Rails测试:运行时错误:can';不要修改冻结字符串,ruby-on-rails,ruby,ruby-on-rails-4,rake-test,Ruby On Rails,Ruby,Ruby On Rails 4,Rake Test,我试图将我的第一个测试添加到我的Rails项目中,但我遇到了一个无法解决的错误 一切正常(我可以通过浏览器创建文章),但我在测试中遇到了以下错误: 测试: 运行: [project] rake test E Finished in 0.477441s, 2.0945 runs/s, 0.0000 assertions/s. 1) Error: ArticlesControllerTest#test_should_create_article: RuntimeError: can't mo

我试图将我的第一个测试添加到我的Rails项目中,但我遇到了一个无法解决的错误

一切正常(我可以通过浏览器创建文章),但我在测试中遇到了以下错误:

测试:

运行:

[project] rake test
E

Finished in 0.477441s, 2.0945 runs/s, 0.0000 assertions/s.

  1) Error:
ArticlesControllerTest#test_should_create_article:
RuntimeError: can't modify frozen String
    app/controllers/articles_controller.rb:30:in `create'
    test/controllers/articles_controller_test.rb:12:in `block (2 levels) in <class:ArticlesControllerTest>'
    test/controllers/articles_controller_test.rb:11:in `block in <class:ArticlesControllerTest>'

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
[project]rake测试
E
以0.477441s、2.0945次运行/秒、0.0000次断言/秒的速度完成。
1) 错误:
ArticlesControllerTest#test(测试)应(创建)文章:
RuntimeError:无法修改冻结的字符串
app/controllers/articles\u controller.rb:30:in'create'
测试/控制器/物品(控制器)(测试)rb:12:"块(2级)中"
测试/控制器/物品\u控制器\u测试.rb:11:in'block in'
1次运行,0次断言,0次失败,1次错误,0次跳过
以下是我认为控制器的相关部分:

class ArticlesController < ApplicationController
  before_action :authenticate_user!
  before_action :set_site
  before_action :set_article, only: [:edit, :update, :destroy]

  respond_to :html, :json

  def create
    @article = Article.new(article_params)
    @article.site = @site
    if @article.save
      redirect_to site_articles_path(@site)
    else
      render 'new'
    end
  end

  private
    def set_site
      @site = current_user.sites.find(params[:site_id])
      add_crumb 'Articles', url_for(@site)
    end

    def set_article
      @article = @site.articles.find(params[:id])
    end

    def article_params
      params.require(:article).permit(:title, :text, :status, :category_id, :keywords, :row_order_position)
    end
end
class-ArticlesController
我相信这些是模型的相关部分:

class Article < ActiveRecord::Base
  include AlgoliaSearch

  belongs_to :site
  belongs_to :category, counter_cache: true
  validates :site, presence: true
  validates :title, presence: true, length: { minimum: 5 }
  enum status: [ :draft, :published ]

  include RankedModel
  ranks :row_order, :with_same => [:site_id, :category_id]

  algoliasearch per_environment: true, force_utf8_encoding: true, sanitize: true do
    attributes :title, :text, :keywords, :site_id

    removeWordsIfNoResults 'allOptional'

    # Listing attributes in order of priority.
    # Use unordered so we don't boost based on if in beginning of attribute.
    attributesToIndex ['unordered(title)', 'unordered(keywords)', 'unordered(text)']

    attributesToHighlight ['title', 'text']

    tags do
      ["site_#{site.id}", status]
    end
  end

end
类文章[:站点id,:类别id]
algoliasearch per_环境:true,强制utf8_编码:true,清理:true do
属性:标题、文本、关键字、站点id
删除“allOptional”结果中的单词
#按优先级顺序列出属性。
#使用unordered,这样我们就不会在属性的开头基于if进行提升。
attributesToIndex[‘无序(标题)’,‘无序(关键字)’,‘无序(文本)’]
属性突出显示['title','text']
标签
[“站点{site.id}”,状态]
结束
结束
结束
你知道为什么吗


或者关于如何调试它的任何建议?

我发现它与模型中的Algolia
标记相关。我将algolia rails升级到了一个更新的版本,并更改了:

["site_#{site.id}", status]
致:


在您的测试中,您想修改从请求中收到的值,您在做什么?您也可以请您的测试吗?Opps!是的,我编辑了这个测试。
["site_#{site.id}", status]
["site_#{site.id}", status.dup]