ruby-on-rails - 使用 RSpec 测试 PG 数据库约束

标签 ruby-on-rails postgresql rspec constraints

我正在尝试使用 RSpec 在 Rails 4 中测试 PG 数据库约束,但我不确定如何设置它。

我的想法是做这样的事情:

before do
  @subscriber = Marketing::Subscriber.new(email: "subscriber@example.com")
end

describe "when email address is already taken" do
  before do
    subscriber_with_same_email = @subscriber.dup
    subscriber_with_same_email.email = @subscriber.email.upcase
    subscriber_with_same_email.save
  end

  it "should raise db error when validation is skipped" do
    expect(@subscriber.save!(validate: false)).to raise_error
  end
end

当我运行它时,它会产生一个错误:

PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint

然而,测试仍然失败。

是否有使测试通过的正确语法?

最佳答案

尝试

it "should raise db error when validation is skipped" do
  expect { @subscriber.save!(validate: false) }.to raise_error
end

有关更多信息,请查看 more info on rspec-expectations expect-error matchers

希望这对您有所帮助!

关于ruby-on-rails - 使用 RSpec 测试 PG 数据库约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124064/

相关文章:

ruby-on-rails - 如何测试 ActiveJob 回调?

ruby-on-rails - 无法使用 mongoid 和 MongoDB 将新记录保存到我的 Rails 模型中

java - 使用 hibernate 和 postgres 增加生成键的起始值

ruby-on-rails - ruby on rails教程第3.2节rspec测试报错

ruby - 如何配置 rspec 和 mongoid 进行 gem 测试?

rspec - 时序问题的不可靠/片状Capybara/AngularJS集成测试

MySQL - 如何选择具有唯一名称的行?

ruby-on-rails - 如何在 Rails 文档中发现可用的方法?

sql - 函数不返回预期值

ruby-on-rails - Ruby-on-rails 中的迁移问题