0

我有一个包含“名称”常规输入字段和“内容”CKeditor 文本区域的表单。如此处所述我可以填写表格,如果我停在这里,我可以看到测试数据库中正确更新的“名称”和“内容”列。美好的。

现在,如果我这样做:

template = ContractTemplate.all.last   
puts "#{template.name}" # => "template_name"
puts "#{template.content}" # => "<p>template_content</p>"

然后问题开始了,如果我尝试更新这两个属性(仍然使用 Capybara),我现在总是依赖于“创建”操作中保存的值,尽管它们已正确更新到数据库中。就像那里没有更新值一样。我试过做 ContractTemplate.reload ,但它不起作用。

完整规格是这样的:

it 'should edit a contract template', :js => true do

  visit contract_templates_path
  click_link "Add"

  fill_in "contract_template_name", :with => "test_template_name"
  fill_in_ckeditor "contract_template_content", :with => "test_template_content"
  click_button "Save"

  template = ContractTemplate.all.last
  template.name.should eq("test_template_name") # pass, content created
  template.content.should eq("<p>\r\n\ttest_template_content</p>\r\n") # pass

  visit contract_template_path(template.id)

  fill_in "contract_template_name", :with => "edited_test_template_name"
  fill_in_ckeditor "contract_template_content", :with => "edited_test_template_content"
  click_button "Save"

  template.name.should eq("edited_test_template_name") # Fail, because == "test_template_name"
  template.content.should eq("<p>\r\n\tedited_test_template_content</p>\r\n") # Fail, not updated too

end

我的方法可能是错误的,但由于“内容”属性是使用 wisiwig 编辑器填充的,所以我看不到任何其他方法来测试保存操作是否真的更新了名称和内容......顺便说一句,在我可以在其中显示 textarea 的结果的应用程序,它将全部呈现为 PDF。

有人可以帮助我吗?

4

2 回答 2

0

我知道了 !我只需要在 spec_helper.rb 中将 transactionnal 固定装置变为 false :

RSpec.configure do |config|
  ...
  config.use_transactional_fixtures = false # true by default
  ...
end

现在一切正常。嗬,我的... 4 小时,我只是生气了。

于 2013-07-03T09:31:34.647 回答
0

您需要template.reload在第二次保存后进行。否则,template记录将包含首次加载时的值。

于 2013-07-02T17:55:16.263 回答