rspec测试协会

2024-01-26

我想在我的 rspec 控制器测试中测试员工是否与公司关联。

我想在我的create工作人员财务主任的行动:

staff.companies << current_company

Where current_company从会话变量中收集。

我该如何为此编写测试?

我有这些型号

class Company < ActiveRecord::Base
  has_many :employees
  has_many :staff, :through => :employees
end

class Employee < ActiveRecord::Base
  belongs_to :company
  belongs_to :staff
end

class Staff < ActiveRecord::Base
  has_many :employees
  has_many :companies, :through => :employees
end

以下测试是我尝试指定关联的尝试,当我输入关联代码时,它失败了:

    it "should belong to the current_company" do
      staff.should_receive(:companies)
      post :create
    end

如果我在控制器中输入“staff.companies

 Failure/Error: post :create
 NoMethodError:
   You have a nil object when you didn't expect it!
   You might have expected an instance of Array.
   The error occurred while evaluating nil.<<

员工控制器创建方法:

  def create
    @staff = Staff.new(params[:staff])

    if @staff.save
      @staff.companies << current_company
      redirect_to staff_index_path, :notice => "Staff created successfully!"
    else
      @company = @staff.firm || current_company
      flash[:alert] = "Staff failed to create"
      render "new"
    end
  end

我会使用不同的方法,因为测试模型应该接收特定消息会使您的测试与实现过于紧密地结合在一起。你真的关心公司是否收到#<<或者其他方法?

实际上,您要测试的是用户在页面上发帖时是否记录了他们的公司。没关系how它被记录下来了。所以我会做这样的事情:

it "should add the company to the user's list of companies" do
  lambda do 
    post :create
  end.should change(staff.companies, :count).from(0).to(1)
  staff.companies.map(&:name).should include("Acme, Inc.")
end

这是测试行为而不是实施。优点是当有人改变时你的测试不会失败<<到等价的push。它还具有更清楚您的意图并因此更好地记录代码的优点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rspec测试协会 的相关文章

随机推荐

  • 今日小部件扩展高度 - iOS10

    今日小部件视图模式的高度无法设置为紧凑模式 无论我设置什么值 它将小部件的高度设置为默认值 扩展模式工作完美 并且值已正确设置并反映在小部件中 我已经在 viewDidLoad 方法中添加了这一行 self extensionContext
  • 生产中使用 Flask-oauthlib 或 authlib?

    我刚刚在我正在构建的网站上使用了flask oauthlib 但是 我注意到该项目的首页有一个警告 要求改为使用 authlib 如果您在生产中使用flask oauthlib 您是否计划迁移到authlib 有谁知道一个完成此迁移的简单项
  • 流式源的查询必须使用 writeStream.start() 执行;

    我正在尝试在 Spark 中读取来自 kafka 版本 10 的消息并尝试打印它 import spark implicits val spark SparkSession builder appName StructuredNetwork
  • 对于 Android 4.4 及以上版本,使用 Crosswalk 有什么真正的好处吗?

    Crosswalk 插件对于为混合应用带来巨大的性能提升非常重要 但问题是 一旦添加 APK 就会变得巨大 给安装程序增加了大约 15 18MB 的大小 那么 将人行横道添加到 Android 4 4 及更高版本的安装程序中是否有任何真正的
  • 类实例实现,初始化实例 - 来自 SICP python

    我试图理解Python类系统实现中的初始化函数 摘自本书 SICP python 参考书籍部分 http www inst eecs berkeley edu cs61a sp12 book objects html instances T
  • 指向常量的指针

    众所周知 通过引用将参数 特别是像结构体一样大的参数 传递给函数是一种很好的做法 为了应用 最小特权 原则 如果该函数不应该更改这些传递变量的值 那么我们需要将它们的引用作为指向常量的指针传递 我的问题是 作为指向常量的指针传递不能防止更改
  • 如何以编程方式绑定 NSCollectionView 的视图子类?

    我已经成功创建了一个 NSCollectionView 并向 IB 中的视图原型添加了一个标签 绑定到我所表示的对象的属性 我现在想以编程方式创建一个 NSButton 和 NSTextField 并将 NSTextField 绑定到我所表
  • 如何忽略 functools 中的参数。 lru_缓存?

    这是我想要通过缓存增强的功能的框架 因为进行 RPC 远程过程调用 涉及到其他主机的 TCP 连接 def rpc rpc server rpc func arg return rpc server do rpc rpc func arg
  • iOS 8.3 - 元视口初始比例低于 1.0 会导致方向变化时出现奇怪的内容缩放

    将我的 iOS 设备升级到 iOS 8 3 后 我注意到元视口初始缩放属性出现了一些奇怪的行为 如果我将初始比例设置为 1 0 以下 并在浏览网页时旋转设备 则整个内容将逐渐变小 最终浏览器将崩溃 我注意到 每次方向变化时内容变小的程度与您
  • Firebase 实时数据库:如何在键值对上正确建立索引

    Question 我有这个 Firebase 实时数据库 groupUsers group1key user1key admin group2key user1key admin user2key readonly user3key rea
  • #1005 - 无法创建表“table_name”(错误号:150)

    这是我的表格 DROP TABLE IF EXISTS tbl comments CREATE TABLE IF NOT EXISTS tbl comments id int 11 NOT NULL auto increment topic
  • 在 python 端动态调整 kivy 标签(和按钮)的大小

    如何在运行时根据文本量动态调整标签或按钮的大小 特别是文本大小和高度 我知道这个问题已经通过以下方式得到了回答 动态调整滚动视图中标签的大小 https stackoverflow com questions 19932614 dynami
  • 如何在Excel VBA中添加到当前单元格选择

    因此 我有一个循环检查列中的每个单元格并找到特定日期 当前是前一周的星期一 我的代码现在确实正确选择了它们 但我希望它保留之前的选择 以便最终选择该规范的所有单元格 Public Function LastMonday pdat As Da
  • 在 setup.py 中添加自定义轮文件作为依赖项?

    我正在开发一个项目 其中一个依赖项实际上是 whl这不在 pypi 上 即我必须直接从作者那里下载轮子并且pip直接安装 在我的setup py文件 有没有办法做类似的事情 install requires library whl matp
  • 如果检测到越界,则禁用平移手势

    我有一个 UIView 我试图在屏幕上上下移动 但是我只想让它平移 这样当视图处于正常位置 0 0 时 您就无法向下拖动视图 我尝试检测识别器的中心何时不是视图高度的一半 但是视图是不可移动的 并且中心始终是高度的一半 在本例中为 230
  • SQL 代理命令行未保存

    我有一个 SSIS 包 我正在尝试安排时间 我在 SQL Server 代理下创建了一个新作业 在作业步骤的 命令行 选项卡上 我选择 手动编辑命令行 当我在作业步骤中从一个选项卡切换到另一个选项卡时 更改会被保留 但每当我退出并保存作业时
  • 在 Ruby 中编写一个在不同行获取参数的方法

    在使用 Rails 时 我发现可以调用这样的方法 lot Lot new do u u grade id grade id u company id company id u type id type id u sale id sale i
  • 如何从 AsyncTask 返回布尔值?

    我有一些 EditText 用户输入 ftp 地址 用户名 密码 端口和 testConnection 按钮 如果连接成功建立 它将返回布尔值 true boolean status ftpConnect address username
  • 在eclipse中创建android项目时出错

    我是 Android 开发人员的新手 我正在学习 但是当我创建一个新项目时 显示了这个错误 在错误日志中我有很多错误 我不知道如何在这里导出所有错误 在项目资源管理器中 我的项目显示如下 我不知道如何解决所有这些错误 感谢您的帮助 并对我的
  • rspec测试协会

    我想在我的 rspec 控制器测试中测试员工是否与公司关联 我想在我的create工作人员财务主任的行动 staff companies lt lt current company Where current company从会话变量中收集