繁体   English   中英

重构response_to Rspec

[英]Refactoring respond_to Rspec

我正在关注Michael Hartl令人惊叹的Rails教程,但是想知道是否有一种方法可以在用户规范中进行重构。 这是非常重复的,想知道是否有办法将其干燥。

it { should respond_to(:name) }
it { should respond_to(:email) }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:remember_token) }
it { should respond_to(:authenticate) }
it { should respond_to(:admin) }
it { should respond_to(:authenticate) }
it { should respond_to(:microposts) }
it { should respond_to(:feed) }
it { should respond_to(:relationships) }
it { should respond_to(:followed_users) }
it { should respond_to(:following?) }
it { should respond_to(:follow!) }
it { should respond_to(:followers) }
it { should respond_to(:reverse_relationships) }
[:name, 
 :email, 
 ...
].each do |attrib|
  it { should respond_to(attrib) }
end

您可以根据需要传递respond_to多个方法名称:

it { should respond_to(:name, :email, :password) }

与通过每个属性创建一个单独的示例相比,以这种方式进行操作的一个好处是运行速度更快,因为它是一个示例而不是n个示例。

话虽如此:我建议您不要像这样指定测试中所有公共属性是什么。 这是结构,而不是行为[1]。 您的用户模型必须具有某些行为,以保证需要每个属性。 我将专注于指定这些行为(使用模型的公共API),而不必担心指定实现细节(例如,模型具有哪些属性)。

我发现should respond_to有用的一次是当我有一个想要多个类实现的通用接口时。 我创建了一个共享的示例组,该组以其最简单的形式指定该类实例对接口中所有响应的响应。

[1] http://blog.davidchelimsky.net/2012/02/12/validations-are-behavior-associations-are-structure/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM