Ruby on rails 重构响应Rspec

Ruby on rails 重构响应Rspec,ruby-on-rails,ruby,rspec,tdd,Ruby On Rails,Ruby,Rspec,Tdd,我正在关注MichaelHartl的惊人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(

我正在关注MichaelHartl的惊人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) }

您可以将
respond\u传递给
任意多个方法名称:

it { should respond_to(:name, :email, :password) }
与为每个属性创建单独的示例相比,这样做的一个好处是运行速度更快,因为它是一个示例,而不是n个示例

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

有一次我发现
应该响应_
很有用,那就是当我有一个我想要多个类实现的公共接口时。我创建了一个共享示例组,以其最简单的形式,将指定类的实例响应接口的所有部分


[1]

您可以将
respond\u传递给
任意多个方法名称:

it { should respond_to(:name, :email, :password) }
与为每个属性创建单独的示例相比,这样做的一个好处是运行速度更快,因为它是一个示例,而不是n个示例

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

有一次我发现
应该响应_
很有用,那就是当我有一个我想要多个类实现的公共接口时。我创建了一个共享示例组,以其最简单的形式,将指定类的实例响应接口的所有部分


[1]

买东西的方式,我不确定这些东西是否应该特别说明。你会在另一个规范的其他地方使用它们,并且会注意到它们不起作用。你失去了我。这在
/spec/models/user_spec.rb
文件中。这些都是该模型的属性/方法,而且它确实通过了。买东西吧,我不确定这些是不是应该指定的东西。你会在另一个规范的其他地方使用它们,并且会注意到它们不起作用。你失去了我。这在
/spec/models/user_spec.rb
文件中。这些都是该模型的属性/方法,它确实通过了。谢谢,这太完美了!我想得太多了。谢谢,太好了!我想得太多了。