rspec:未找到属性(存在)错误

2024-01-17

我在指定模型验证时遇到一些问题,该模型充当状态机(gem state_machine 0.9.4)。通过 stat_machine,我定义了对交付状态下的自行车的验证:

state :delivered do
  validates_presence_of :shipping_number
end

在我的规格中,这是正确的:

it "may not transit to :delivered without a shipping number " do
  @bike.state = 'delivered'
  @bike.shipping_number = nil
  @bike.save
  @bike.should have(1).error_on(:shipping_number)
end

但是当这样指定时:

it "may not transit to :delivered without a shipping number " do
  @bike.shipping_number = nil
  @bike.deliver
  @bike.should have(1).error_on(:shipping_number)
end

I get:

expected 1 error on :shipping_number, got 0

虽然

it "may not transit to :delivered without a shipping number " do
  @bike.shipping_number = nil
  @bike.deliver
  raise @bike.errors.inspect
end

向我展示:

Failure/Error: raise @bike.errors.inspect
#<OrderedHash {:shipping_number=>["can't be blank"]}>

有人可以解释一下吗?


检查这里的链接,它解释了这个问题:http://web.archive.org/web/20130202082209/http://agaskar.com/post/1627270986/fun-state-machine-rspec-gotcha http://web.archive.org/web/20130202082209/http://agaskar.com/post/1627270986/fun-state-machine-rspec-gotcha

底线:失败的状态转换会导致回滚到之前的状态,现在 validates_presence_of 与以下错误检查无关。

虽然可能有一种更惯用的方法来做到这一点,但我在规范中做了类似的事情:

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

rspec:未找到属性(存在)错误 的相关文章

随机推荐

  • 原则 2 子查询

    我想使用查询生成器实现子查询 但我不理解语法 我正在处理一个位置表 其中的条目可以是城市 州或邮政编码 具体取决于设置的位置类型 我想获取某个州的所有位置 并删除任何城市类型且人口低于一定数量的位置 qb gt select l gt fr
  • lush() java 文件处理

    lush 的具体用途是什么 流和缓冲区有什么区别 为什么我们需要缓冲区 缓冲的优点是效率 通常 将 4096 字节的块写入文件一次比写入 4096 次一个字节要快 缓冲的缺点是您会错过反馈 句柄的输出可以保留在内存中 直到写入足够的字节以使
  • 为什么(不相关的)using 声明可以通过参数依赖查找来协调重载歧义?

    这是问题的后续here https stackoverflow com questions 46782156 does argument dependent lookup go before normal scope lookup使用参数相
  • 如何使用 RSpec 测试 Rails 3.2 ActionMailer 正在渲染正确的视图模板?

    我在用rspec rails https github com rspec rspec rails我想测试我的邮件程序是否正在呈现正确的视图模板 describe MyMailer do describe notify customer d
  • MatLab:对数 z 轴和 bar3 的奇怪显示

    我想使用显示 3d 直方图bar3阴谋 使用相对于 x y 和 z 轴的线性比例可得出以下结果 但是 由于 z 值的间隔非常大 我想使用对数 z 轴 以便较低的 z 值也可见 但是 将 z 轴设置为对数set gca ZScale log
  • NDB 中的 Entity.all(keys_only=True).fetch(20) 相当于什么?

    如何在 NDB 中获得以下查询的等效结果 Entity all keys only True fetch 20 我知道你可以通过 keys only True to the iter 方法 但是 如果我想执行仅获取键的操作 我该如何在 ND
  • AVAsset 轨道为空

    本质上我正在寻找连接AVAsset文件 我大致知道该怎么做 但我在加载音频文件方面遇到了困难 我可以用AVAudioPlayer 我可以通过终端在目录中看到它们 但是当我尝试使用以下命令加载它们时AVAssetURL它总是返回一个空的轨道数
  • 当使用“make altinstall”安装Python时,如何干净地删除它?

    你怎么cleanly使用 make 安装时删除 Pythonaltinstall 我没有找到altuninstall或 makefile 中的此类内容 这似乎也不是一个常见问题 在本例中 我在 Ubuntu 中使用 Python 2 7 x
  • Pandas 重新采样 FutureWarning

    我有一个 1 分钟柱 OHLC 价格 CSV 文件 我正在尝试将其重新采样为 15 分钟柱 我正在使用的代码来自于此link http sacbnctrading blogspot in 2016 10 convert 1m ohlc da
  • 如何在程序集中包含来自另一个命名空间的类而不是将它们写入单独的 DLL 文件中?

    我有一个C 具有两个命名空间的项目 一个图形用户界面 Stoff3GUI作为名称空间 与 GUIxaml and cs文件 标记为起始对象和库 Stoff3Lib作为名称空间 所有类都在执行实际工作 现在 当我编译代码时 我将收到一个 ex
  • 扩展会员 API、MembershipUser

    我创建了自己的数据库架构来存储用户信息 CREATE TABLE dbo MyCustomMembership Users UserId uniqueidentifier NOT NULL UserName nvarchar 256 NOT
  • 测试用例生成工具[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找可以生成测试用例或帮助软件测试的工具或框架 到目前为止 我发现了以下内容 Feed4JUnit Java http testfu
  • 如果 main 为 void,D 如何在成功时返回 0,在失败时返回非零?

    在 D 中 main函数定义为 void main perhaps some args but I do not remember 我确信这个函数在成功时返回零 在失败时返回非零 但它被定义为不返回任何内容 其背后的逻辑是什么 Alexan
  • 如何对 mongodb ObjectId 字段进行正则表达式查询

    这有点棘手 如何对 ObjectId 字段进行正则表达式查询 我正在使用 java api 所以这就是我到目前为止所拥有的 BasicDBObject q new BasicDBObject q put field Pattern comp
  • PHP - 声明一个全局数组

    我遇到的问题是未定义的变量当我尝试在函数内使用数组时 下面的代码就是一个例子 我怎样才能访问数组 prev函数内部hello 我尝试过搜索 但我真的不知道如何使用 GLOBALS varname 当变量是数组时 谢谢你的帮助 您还可以将变量
  • 命名空间在其他项目中不可用

    我创建了一个 C 控制台应用程序 在该应用程序中 我有很多名称空间 例如 namespace com xyz foo bar namespace com xyz abc def 当我将此控制台应用程序的引用添加到 WCF 服务项目中时 某些
  • 在合并和推送之前强制分支重新设置基础

    我想在我的 Gitlab 服务器上添加一个钩子 以防止在 master 上推送合并的分支 如果它们之前没有重新建立基础 例如 A B C D master E F G new feature 我希望用户在合并 推送之前重新调整他的功能 A
  • jQuery td onclick 设置复选框,不冒泡

    我希望能够单击表中的 td 元素 并让它选中或取消选中同一行上同级 td 中的复选框 单击该复选框仍应 工作正常 单击 td 复选框所在的元素 还应该选中该复选框 单击不同的 td 不应该 需要双击 重置单击 由于切换实施不当 Fiddle
  • 使用指令 Angular 2 更改输入的 ngModel 值

    我不知道如何访问和更改输入ngModel使用指令的值 问题的结果是 当我选择所需的地址时 模型的地址值不会更新 它只是设置为我实际在输入中输入的内容 而不是输入的最终值 我输入 830 我选择 8300 Fauntleroy Way Sou
  • rspec:未找到属性(存在)错误

    我在指定模型验证时遇到一些问题 该模型充当状态机 gem state machine 0 9 4 通过 stat machine 我定义了对交付状态下的自行车的验证 state delivered do validates presence