ruby-on-rails - 用于 Rails 的 RSpec 和 ActiveRecord : How to write effective tests

标签 ruby-on-rails ruby activerecord rspec

到目前为止,我已经构建了一个简单的 Rails 应用程序,其中包含三个继承自 ActiveRecord 的类。我在测试驱动开发方面领先了一点,因为我已经编写了需要测试的类。到目前为止,我编写的测试都进行得很顺利。对象正在创建,属性正在响应,验证都已到位。

当我调用“!”时问题就开始了在我的创建方法上,因为现在对象一直被传递到数据库。而不是我的正常验证拦截无效输入,数据库似乎有机会响应刺激。

到目前为止,我在运行测试时收到的错误是:

ActiveRecord::记录无效: 验证失败:店铺太长(最多11个字符)

我很高兴收到此错误,但想知道如何在我的测试中更好地规划它。产生上述错误的代码是:

  it "should not a accept a department with a shopify shop_id that's over 11 chars" do
    long_id = "9" * 12
    long_id_department = Department.create!(@attr.merge(:id => [long_id, ""]))
    long_id_department.should_not be_valid
  end

我认为这一行尤其应该采用其他形式:long_id_department.should_not be_valid

希望大家能阐明该表格应该是什么。

最佳答案

shoulda gem 使您的验证测试变得轻而易举。较新的 shoulda 版本是作为 RSpec 的附加组件构建的。

您尝试的特定验证类型的文档是 here.

您最终会得到如下所示的测试代码。

describe Department do
  it { should ensure_length_of(:id).is_at_most(11) }
end

关于ruby-on-rails - 用于 Rails 的 RSpec 和 ActiveRecord : How to write effective tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7314522/

相关文章:

ruby-on-rails - 为什么在 Ruby 中有时需要括号?

ruby - Ruby 对 GUI 开发有好处吗?

ruby - 为什么我们应该避免以其修饰符形式使用 rescue?

sql - 什么时候放弃事件记录?

ruby-on-rails - 验证关联对象的最大数量

javascript - fabric.js 将事件监听器分配给多个事件的对象

ruby-on-rails - 渲染部分 Assets

ruby-on-rails - 运行一个简单的 rails-api 项目返回 ActiveRecord::ConnectionNotEstablished 错误

mysql - 如何让所有艺术家都没有视频和照片?

ruby-on-rails - Rails - mongodb - 新的 root 用户