Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec:显示一个模型&x27;当它';这是无效的_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails Rspec:显示一个模型&x27;当它';这是无效的

Ruby on rails Rspec:显示一个模型&x27;当它';这是无效的,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,在Rspec测试中,我通常会这样写: user.new(...) user.should be_valid 问题是,当测试失败时,我看不到用户对象上的错误。是否有一种很好的方法来重新编写此测试,以便在Rspec输出中看到类似于user.errors.inspect的内容?我已经尝试过user.errors.should\u empty,但它仍然只是说“expected true,get false”。您可以通过定义自定义匹配器来实现这一点。像这样的东西应该能奏效 RSpec::Matchers

在Rspec测试中,我通常会这样写:

user.new(...)
user.should be_valid

问题是,当测试失败时,我看不到用户对象上的错误。是否有一种很好的方法来重新编写此测试,以便在Rspec输出中看到类似于
user.errors.inspect的内容?我已经尝试过
user.errors.should\u empty
,但它仍然只是说“expected true,get false”。

您可以通过定义自定义匹配器来实现这一点。像这样的东西应该能奏效

RSpec::Matchers.define :be_valid do
  match do |actual|
    actual.valid?
  end

  failure_message_for_should do |actual|
    "expected that #{actual} would be valid (errors: #{actual.errors.full_messages.inspect})"
  end

  failure_message_for_should_not do |actual|
    "expected that #{actual} would not be valid"
  end

  description do
    "be valid"
  end
end

@哈马尔:你可以把这个
命名为有效的
,它应该可以正常工作。