ruby-on-rails - 为什么当我尝试将对象保存到数据库时 Rails 函数测试失败

标签 ruby-on-rails ruby-on-rails-3 testing functional-testing

我正在尝试测试我的显示操作,但我首先必须将一个对象保存到数据库中才能显示。

test "should get show" do
  post :create, question: { question: 'apple'}
  get :show, {'id' => "1"}
  assert_response :success
  assert_not_nil assigns(:question)
end

在另一个测试中,我有 post :create... 行并且它有效。但是,在这里我不断收到 ActiveRecord::RecordNotFound: Couldn't find Question with id=1 所以我不确定问题是什么。我该如何解决?总体而言,执行此操作的最佳方法是什么?

编辑:

我已经将测试更改为如下所示:

test "should get show" do
    post :create, question: {set_id: 4}
    pp Question.all
    get :show, {'id' => "1"}
    assert_response :success
    assert_not_nil assigns(:question)
end

这给了我:

[#<Question id: 261990764, question: "Who was... updated_at: "2012-06-15 19:34:16">,
 #<Question id: 607888892, question: "Who was... updated_at: "2012-06-15 19:34:16">,
 #<Question id: 607888893, question: nil, ... set_id: 4,...]

这是您所期望的,除了 ID 部分。 rails 是否在测试环境中分配随机 ID?

这是我通过的测试:

test "should get show" do
  q = Question.new(question: 'q', answer: 'a', set_id: 1)
  q.save
  get :show, {id: q.id}
  assert_response :success
  assert_not_nil assigns(:question)
end

仍然希望有人向我解释为什么 ID 如此之高,以及 rails 如何分配它。

还有,这是一个利用固定装置的示例:

test "should get show2" do
    get :show, {id: questions(:prez_one).id}
    assert_response :success
    assert_not_nil assigns(:question)
end

最佳答案

您是否检查过您创建的问题是否有 id = 1?
您的数据库中的 id 列是否自动递增?
您使用的是 MySQL 数据库吗?

您可能希望在 post :create 行之后显示所有问题。
然后,选择Question with apple,获取对应的id。

希望对您有所帮助。

关于ruby-on-rails - 为什么当我尝试将对象保存到数据库时 Rails 函数测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055486/

相关文章:

ruby-on-rails - Ruby on Rails Honeybadger 集成不起作用 - 有点

ruby-on-rails - Paperclip 的路径 missing.png

ruby-on-rails - 资源生成器和 Controller 生成器之间的区别

ruby-on-rails - 使用 Devise 的 RoR 中的 session 超时消息

ruby-on-rails - 在 Rails 中,我应该在 capybara (或集成)测试中包含用户输入表单错误流吗?

angularjs - 在 Angular 加载之前测试显示内容的 Protractor 方法是什么

ruby-on-rails - 设计 sign_in_and_redirect 导致 rspec 测试失败

使用cucumber测试时sql错误无法在事务内启动事务

jQuery html() 和换行符

c++ - C++ 中的回归测试