如何在应用程序控制器中测试方法?我的方法使其他测试随机崩溃

约书亚·穆海姆(Joshua Muheim)

我在应用程序控制器中有一个简单的方法:

class ApplicationController < ActionController::Base
  def filename_for_export(project, type, format = nil)
    buffer = "#{project.customer} - #{project.name} (#{type}, #{t 'org.name'}, #{Date.today.to_s :db})"
    buffer += ".#{format}" if format
    buffer
  end
end

我对此进行以下测试:

describe ApplicationController do
  describe '#filename_for_export' do
    before { @controller = ApplicationController.new }

    it 'returns a good human readable filename' do
      project = create(:project)
      result = @controller.instance_eval{ filename_for_export(project, 'Audit') }
      expect(result).to eq 'Project test customer - Project test name (Audit, Access for all, 2015-06-15)'
    end
  end
end

一切正常。然后我添加了另一个测试:

it 'appends a format extension if given' do
  project = create(:project)
  result = @controller.instance_eval{ filename_for_export(project, 'Audit', 'pdf') }
  expect(result).to eq 'Project test customer - Project test name (Audit, Access for all, 2015-06-15).pdf'
end

也工作正常。但有趣的是,此第二次测试似乎破坏了某些使其他许多规格随机失效的条件:

...
rspec ./spec/features/file_upload_spec.rb:18 # File upload displays a preview of an uploaded file
rspec ./spec/features/file_upload_spec.rb:4 # File upload allows to upload a file
rspec ./spec/features/file_upload_spec.rb:27 # File upload displays a preview of an uploaded file (from the temporary cache) after a re-display of the form
rspec ./spec/features/file_upload_spec.rb:60 # File upload allows to remove a file
rspec ./spec/features/markdown_spec.rb:4 # Markdown uses Pandoc as converter for inline markdown
rspec ./spec/features/users/destroy_spec.rb:22 # Deleting user signed in as admin grants permission to delete other user
rspec ./spec/features/success_criteria/show_spec.rb:6 # Showing success criterion displays a success criterion
rspec ./spec/features/boilerplate_originals/edit_spec.rb:11 # Editing boilerplate grants permission to edit a boilerplate
...

它始终是另一组失败的规范(我想这是一些订单问题),但是我不知道会破坏什么?第二个规范与第一个规范没有任何不同,那么它会破坏什么呢?

扬·布西克(Jan Bussieck)

如果你必须这样做,你可以使用Rspec的的匿名控制器描述在这里

 ...

 controller do
   def index
     project = create(:project)
     render json: filename_for_export(project, 'Audit', 'pdf')
   end
 end

 it 'appends a format extension if given' do
   get :index
   expect(JSON.parse(response.body)).to eq 'Project test customer - Project test name (Audit, Access for all, 2015-06-15).pdf'
 end

但是,我强烈建议您仅将此方法提取到一个普通的旧红宝石对象中,并作为单元测试对其进行隔离测试。您为“常规”控制器方法编写的请求规范应涵盖集成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

迷你测试 - 无需渲染即可测试应用程序控制器方法

来自分类Dev

Rspec使用应用程序控制器方法

来自分类Dev

EmberJS-从其他控制器访问应用程序控制器

来自分类Dev

如何在应用程序控制器中定义helper_method

来自分类Dev

应用程序控制器导轨中的私有方法

来自分类Dev

装饰器和应用程序控制器上的使用方法

来自分类Dev

装饰器和应用程序控制器上的使用方法

来自分类Dev

如何在一个特定实例的应用程序控制器中覆盖rescue_from

来自分类Dev

如何操纵控制器测试的应用程序配置?

来自分类Dev

在Grails应用程序控制器外部使用了类[]上的方法

来自分类Dev

Rails API-使应用程序控制器方法保持干燥

来自分类Dev

应用程序控制器有哪些属性和方法?

来自分类Dev

我如何在 cake php 3 中应用程序的每个网页中使用控制器的方法

来自分类Dev

如何从应用程序控制器中呈现错误的 json?

来自分类Dev

如何在另一个控制器余烬中绑定应用程序控制器属性

来自分类Dev

从 Angular 中的应用程序控制器访问视图控制器数据

来自分类Dev

如何使其他应用程序隐藏窗口从我的应用程序中可见?

来自分类Dev

从didinsertelement视图访问应用程序控制器

来自分类Dev

Rails Navbar 应用程序控制器变量

来自分类Dev

如何将事件从内部组件冒泡到Emberjs中的应用程序控制器?

来自分类Dev

如何测试JavaFX控制器的方法?

来自分类Dev

RAILS:会话未在应用程序控制器中包含的模块中定义

来自分类Dev

如何测试控制器中是否正在调用方法?

来自分类Dev

如何从控制台应用程序调用控制器中的方法

来自分类Dev

如何在我的Node.js应用程序中合并模型和控制器?

来自分类Dev

如何从IOS应用程序控制器显示半透明的视图

来自分类Dev

在Meanjs应用程序控制器中承诺“那么”不是一个函数

来自分类Dev

在应用程序控制器中编写cakephp会话

来自分类Dev

为什么在Rails引擎中明确要求应用程序控制器?

Related 相关文章

  1. 1

    迷你测试 - 无需渲染即可测试应用程序控制器方法

  2. 2

    Rspec使用应用程序控制器方法

  3. 3

    EmberJS-从其他控制器访问应用程序控制器

  4. 4

    如何在应用程序控制器中定义helper_method

  5. 5

    应用程序控制器导轨中的私有方法

  6. 6

    装饰器和应用程序控制器上的使用方法

  7. 7

    装饰器和应用程序控制器上的使用方法

  8. 8

    如何在一个特定实例的应用程序控制器中覆盖rescue_from

  9. 9

    如何操纵控制器测试的应用程序配置?

  10. 10

    在Grails应用程序控制器外部使用了类[]上的方法

  11. 11

    Rails API-使应用程序控制器方法保持干燥

  12. 12

    应用程序控制器有哪些属性和方法?

  13. 13

    我如何在 cake php 3 中应用程序的每个网页中使用控制器的方法

  14. 14

    如何从应用程序控制器中呈现错误的 json?

  15. 15

    如何在另一个控制器余烬中绑定应用程序控制器属性

  16. 16

    从 Angular 中的应用程序控制器访问视图控制器数据

  17. 17

    如何使其他应用程序隐藏窗口从我的应用程序中可见?

  18. 18

    从didinsertelement视图访问应用程序控制器

  19. 19

    Rails Navbar 应用程序控制器变量

  20. 20

    如何将事件从内部组件冒泡到Emberjs中的应用程序控制器?

  21. 21

    如何测试JavaFX控制器的方法?

  22. 22

    RAILS:会话未在应用程序控制器中包含的模块中定义

  23. 23

    如何测试控制器中是否正在调用方法?

  24. 24

    如何从控制台应用程序调用控制器中的方法

  25. 25

    如何在我的Node.js应用程序中合并模型和控制器?

  26. 26

    如何从IOS应用程序控制器显示半透明的视图

  27. 27

    在Meanjs应用程序控制器中承诺“那么”不是一个函数

  28. 28

    在应用程序控制器中编写cakephp会话

  29. 29

    为什么在Rails引擎中明确要求应用程序控制器?

热门标签

归档