如何在Ruby on Rails中测试嵌套资源而不显式定义外键关系?

2026-04-11 17:473阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计497个文字,预计阅读时间需要2分钟。

如何在Ruby on Rails中测试嵌套资源而不显式定义外键关系?

我正在尝试修复嵌套资源的功能测试。我的`config/routes.rb`文件如下所示:rubyShop360::Application.routes.draw do resources :libraries do resources :library_imports endend嵌套的`library_imports`资源可能会破坏生成的测试。

我正在尝试修复嵌套资源的功能测试.我的config / routes.rb文件如下所示:

Shop360::Application.routes.draw do resources :libraries do resources :library_imports end end

嵌套library_imports资源会破坏生成的测试,如下所示:

test "should get index" do get :index assert_response :success assert_not_nil assigns(:library_imports) end

因为嵌套会更改所有网址.

我已经在几个地方看到了通过添加一个library_id参数来解决这个问题的建议:

test "should get index" do get :index, :library_id => 1 assert_response :success assert_not_nil assigns(:library_imports) end

(第二行改了)

为了使这个工作,我必须在我的library_import fixture中明确指定library_id?自Rails 2.0以来,可以在夹具数据中定义关联,而无需借助这些显式的键定义.我现在被迫回到这只老鼠窝里,因为我正在筑巢资源吗?

有没有更好的方法让我的测试通过?

好吧,这并不像我想象的那么复杂.让我们从灯具开始:

libraries.yml

lib1: name: lib1 description: Library one lib2: name: lib2 description: Library two

library_imports.yml

import1: name: import1 description: Import one library: lib1 import2: name: import2 description: Import two library: lib2

我以正确的方式在此夹具数据中创建关联(即没有显式键).

现在,回想一下失败的测试(在library_imports_controller_test.rb中):

test "should get index" do get :index assert_response :success assert_not_nil assigns(:library_imports) end

在这个文件的顶部是安装回调,如下所示:

setup do @library_import = library_imports(:import1) end

所以我可以在我的测试中引用@library_import(特别是它的library_id字段).我改变它是这样的:

如何在Ruby on Rails中测试嵌套资源而不显式定义外键关系?

test "should get index" do get :index, :library_id => @library_import.library_id assert_response :success assert_not_nil assigns(:library_imports) end

我的测试从红色变为绿色.

本文共计497个文字,预计阅读时间需要2分钟。

如何在Ruby on Rails中测试嵌套资源而不显式定义外键关系?

我正在尝试修复嵌套资源的功能测试。我的`config/routes.rb`文件如下所示:rubyShop360::Application.routes.draw do resources :libraries do resources :library_imports endend嵌套的`library_imports`资源可能会破坏生成的测试。

我正在尝试修复嵌套资源的功能测试.我的config / routes.rb文件如下所示:

Shop360::Application.routes.draw do resources :libraries do resources :library_imports end end

嵌套library_imports资源会破坏生成的测试,如下所示:

test "should get index" do get :index assert_response :success assert_not_nil assigns(:library_imports) end

因为嵌套会更改所有网址.

我已经在几个地方看到了通过添加一个library_id参数来解决这个问题的建议:

test "should get index" do get :index, :library_id => 1 assert_response :success assert_not_nil assigns(:library_imports) end

(第二行改了)

为了使这个工作,我必须在我的library_import fixture中明确指定library_id?自Rails 2.0以来,可以在夹具数据中定义关联,而无需借助这些显式的键定义.我现在被迫回到这只老鼠窝里,因为我正在筑巢资源吗?

有没有更好的方法让我的测试通过?

好吧,这并不像我想象的那么复杂.让我们从灯具开始:

libraries.yml

lib1: name: lib1 description: Library one lib2: name: lib2 description: Library two

library_imports.yml

import1: name: import1 description: Import one library: lib1 import2: name: import2 description: Import two library: lib2

我以正确的方式在此夹具数据中创建关联(即没有显式键).

现在,回想一下失败的测试(在library_imports_controller_test.rb中):

test "should get index" do get :index assert_response :success assert_not_nil assigns(:library_imports) end

在这个文件的顶部是安装回调,如下所示:

setup do @library_import = library_imports(:import1) end

所以我可以在我的测试中引用@library_import(特别是它的library_id字段).我改变它是这样的:

如何在Ruby on Rails中测试嵌套资源而不显式定义外键关系?

test "should get index" do get :index, :library_id => @library_import.library_id assert_response :success assert_not_nil assigns(:library_imports) end

我的测试从红色变为绿色.