让我们假设以下情况
class A attr_accessor :name def initialize(name) @name = name end end subject { A.new('John') }
字符串那么我想要一些像这样的俏皮话
it { should have(:name) eq('John') }
型有可能吗?
6psbrbz91#
方法its已从RSpec https://gist.github.com/myronmarston/4503509中删除。相反,您应该能够以这种方式执行一行代码:
it { is_expected.to have_attributes(name: 'John') }
字符串
xzabzqsa2#
是的,这是可能的,但是你想要使用的语法(在所有地方使用空格)有一个隐含的含义,即have(:name)和eq('John')都是应用于方法should的参数。所以你必须将这些参数转换为参数,这不是你的目标。也就是说,你可以使用rspec custom matchers来实现类似的目标:
have(:name)
eq('John')
should
require 'rspec/expectations' RSpec::Matchers.define :have do |meth, expected| match do |actual| actual.send(meth) == expected end end
字符串这将为您提供以下语法:
it { should have(:name, 'John') }
型也可以使用its
its
its(:name){ should eq('John') }
型
w8f9ii693#
person = Person.new('Jim', 32) expect(person).to have_attributes(name: 'Jim', age: 32)
字符串参考:rspec have-attributes-matcher
3条答案
按热度按时间6psbrbz91#
方法its已从RSpec https://gist.github.com/myronmarston/4503509中删除。相反,您应该能够以这种方式执行一行代码:
字符串
xzabzqsa2#
是的,这是可能的,但是你想要使用的语法(在所有地方使用空格)有一个隐含的含义,即
have(:name)
和eq('John')
都是应用于方法should
的参数。所以你必须将这些参数转换为参数,这不是你的目标。也就是说,你可以使用rspec custom matchers来实现类似的目标:字符串
这将为您提供以下语法:
型
也可以使用
its
型
w8f9ii693#
字符串
参考:rspec have-attributes-matcher