使用 Rspec 测试“创建后”

2024-03-11

我正在尝试使用 Rspec 测试“创建后”操作。代码如下:

   def valid_attributes
     {
    :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first,
        :name => 'USA',
        :description => 'USA Flight',
        :zipcodes => ''),
    :price => '100.00',
    :class => 'first',

     }
   end

   def valid_session
     {}
   end

   before(:each) do
       @request.env["devise.mapping"] = Devise.mappings[:admin]
       admin = FactoryGirl.create(:admin)
       sign_in admin                           
      end

describe "POST create" do
     describe "with valid params" do
       it "creates a new Flymgr::Rule" do
         expect {
           post :create, {:Flymgr_rule => valid_attributes}
         }.to change(Flymgr::Rule, :count).by(1)
       end

表单所需的属性之一是“区域”,这是一个下拉框,下拉列表的选项是使用不同的表单创建的。我不知道如何使用 Rspec 创建表单条目。如您所见,我尝试从不同的控制器调用方法Flymgr::Zone.new。我认为这不起作用,并且破坏了我的测试。

任何人都可以建议最好的方法吗?也许我应该使用 FactoryGirl 来创建区域和规则条目?


您的请求参数哈希有一个对象作为值:zone,当您发布它时,它只是“to_s”,这不太可能是您想要的。

一般来说,最佳实践是使用 Factory Girl 构建对象,并使用 attribute_for 策略参数化 post 请求的属性:测试“创建”控制器操作的正确方法是什么? https://stackoverflow.com/questions/10548745/what-is-the-proper-way-to-test-create-controller-actions

您的问题表明该关联是一个属于,因此您只需要发布一个 id 即可。请注意,目前,FactoryGirl 不会为关联创建任何属性。如果规则的工厂定义负责区域关联,则可以使用以下解决方法:

FactoryGirl.build(:flymgr_rule).attributes

还包括 zone_id 但是,您需要排除不需要的参数。 (“id”、“created_at”、“updated_at”等)。

因此,您最好按照在有效发布请求中看到的方式显式插入区域的参数哈希信息。

阅读有关 Factorygirl 属性和关联的帖子:https://github.com/thoughtbot/factory_girl/issues/359 https://github.com/thoughtbot/factory_girl/issues/359

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

使用 Rspec 测试“创建后” 的相关文章

随机推荐

  • 使用 Spring Profiles 运行 gradle 任务(集成测试)

    需要通过 gradle 使用 spring 配置文件运行测试 gradle clean build 我添加了任务 task beforeTest doLast System setProperty spring profiles activ
  • __attribute__((constructor)) 调用顺序混乱

    答案here https stackoverflow com questions 8433484 c static initialization vs attribute constructor表明 attribute constructo
  • 如何在 rmarkdown Rmd 文件中包含摘要

    In a Rmd文件的标题如下 我想包含一个摘要 所以我尝试了标准的 LateX 文章形式 abstract This paper explores a variety of topics related to the question o
  • 我可以在本地主机环境上测试 shibboleth IdP 和 SP 吗?

    我可以在本地主机环境上测试 shibboleth IdP 和 SP 吗 我只有一台电脑 Win7 Yes你当然可以 在该计算机中下载并安装 SP 和 idP 配置两者的元数据以与本地主机通信 或者为了更好地轻松使用 SP 和 idP 的两个
  • 如何在 Visual Studio 2019 中自动添加分号到行尾

    我的问题类似于如何在 Visual Studio 代码中在行尾添加分号 https stackoverflow com questions 30118344 how to add semicolon to the end of the li
  • 如何以编程方式设置或清除 32BIT 标志?

    编译时 我总是将其设置为 Any CPU 然而 有些客户没有所需二进制文件的 64 位版本 即使在 x64 系统上运行也是如此 在这些情况下 我要求他们使用 corflags exe 32BIT 选项修改我的二进制文件 http msdn
  • 在 Racket 源代码中选择学生语言

    我正在尝试为 DrRacket 编写一个源文件 指定其中一种语言如何设计教学语言的程序 see 球拍文档 http docs racket lang org drracket htdp langs html 我知道我可以在 DrRacket
  • Android 上符合 OpenGL-ES 2.0 所需的最小纹理大小?

    某个硬件是否需要支持最小纹理尺寸才能符合 OpenGL ES 2 0 规范 GL MAX TEXTURE SIZE 值必须至少为 1024 或 2048 或类似的值 我想知道这一点的原因是因为我正在研究使用着色器的东西 因此必须是 Open
  • 通过 Selenium Grid 运行 Selenium IDE 测试

    首先我应该说 我感到遗憾和痛苦noob 但我正在努力改变这一点 我不懂任何编程语言 但通过做足够的研究来完成我需要完成的任何工作 从而成功地 让事情发生 不管怎样 我一直在使用 Selenium IDE 创建 Selenium 测试 但在通
  • MySQL PHPMyAdmin 错误 #1062 - 键“PRIMARY”重复条目“0”

    现在我想添加一个主键id列 但它抛出错误 1062 密钥 PRIMARY 重复输入 0 我已经尝试过这个 向现有表添加主键 https stackoverflow com questions 11794659 add primary key
  • 选择用于实现分布式消息传递算法的编程语言

    基本上 我想实现以下算法并分析使用这些算法构建的系统在不同条件下的行为 八卦协议 多个paxos 一致的散列 我的兴趣在于这些算法 我基本上是在寻找一种编程语言 可以让我快速编写这些算法并深入理解这些算法 我应该选择哪种语言 Java Sc
  • 如何签署由第 3 方提供的发布 iphone 二进制文件?

    我收到了一家外包公司为我工作的公司开发的 iPhone 应用程序 我无权访问源代码 只能访问已编译的二进制文件 我希望能够使用我们的证书 配置信息等对其进行签名 以便我可以将其提交到应用程序商店 我该怎么做呢 我知道的存在codesign但
  • 如何切换到“更多”视图中的选项卡栏项目?

    我正在用 Objective C 为 Iphone Ipad 编写一个应用程序 我在标签栏的 更多 中有一些项目 我想切换到其中一种视图 我该怎么做 通常我会使用 selectedIndex 但它在 更多 选项卡上不起作用 要从更多屏幕选择
  • 使用 for 迭代 python 列表时如何指定类型/类名

    我知道 python 是动态类型语言 但想知道这是否可能 假设我有一个名为 people 的类 Person 的列表 people people append Person james for p in people p name p na
  • PHP(或其他):处理“不可能发生”的异常的策略

    考虑以下代码 class C throws InvalidArgumentException function classCreateInstance class if is string class throw new InvalidAr
  • mysql查询中的正则表达式

    我有 mysql 表值 例如 1 2 1 2 3 1 4 5 1 4 5 12 15 15 45 75 1 5 15 25 35 55 55 65 75 我想选择哪些行的编号为 5 而不是 15 25 或 35 我尝试过使用 LIKE 查询
  • 材质按钮 切换组单选

    我怎样才能强制材质按钮切换组表现得像 RadioGroup 一样 总是至少有一个选定的项目 环境setSingleSelection true 如果您单击组中的按钮两次 还可以增加不选择任何内容的可能性 这是我的代码
  • 暂时禁用 Lollipop CheckBox 上的动画

    我有一个 ListView 其中包含复选框的行 此 ListView 附加了过滤行为 它通过设置新数据来回收这些行 通过一个简单的setData 方法 随着过滤条件的变化 发生这种情况时 任何具有以下属性的回收行checked状态更改将更新
  • Hibernate 4 和 joda-time

    他们婚姻幸福吗 我使用的是最新版本的 hibernate 4 和 1 3 版本joda 时间休眠支持 http www joda org joda time hibernate 我也认为这是当前的最新版本 使用注释时 一切似乎都工作正常 按
  • 使用 Rspec 测试“创建后”

    我正在尝试使用 Rspec 测试 创建后 操作 代码如下 def valid attributes zone gt Flymgr Zone new countries gt Flymgr ZoneCountry first name gt