Parameters 通过Rspec考试的科目
我正在尽我最大的努力去理解Rspec的流程,但最简单的事情似乎都没有发生 我想在两个不同的模型上重用一些属性格式有效性测试。所以,我想我应该把那些Rspec测试转移到另一个方法中,然后用被测试的对象调用这个方法。即从:Parameters 通过Rspec考试的科目,parameters,rspec,Parameters,Rspec,我正在尽我最大的努力去理解Rspec的流程,但最简单的事情似乎都没有发生 我想在两个不同的模型上重用一些属性格式有效性测试。所以,我想我应该把那些Rspec测试转移到另一个方法中,然后用被测试的对象调用这个方法。即从: describe "when email format is invalid" do it "should be invalid" do addresses = %w[user@foo,com user_at_foo.org example.user@fo
describe "when email format is invalid" do
it "should be invalid" do
addresses = %w[user@foo,com user_at_foo.org example.user@foo.
foo@bar_baz.com foo@bar+baz.com]
addresses.each do |invalid_address|
@user.email = invalid_address
@user.should_not be_valid
end
end
end
对这样的事情:
describe "email format checking" do
valid_email_check(@user)
end
..和utilities.rb中
def valid_email_check(subject)
describe "when email format is invalid" do
it "should be invalid" do
addresses = %w[user@foo,com user_at_foo.org example.user@foo.
foo@bar_baz.com foo@bar+baz.com]
addresses.each do |invalid_address|
subject.email = invalid_address
subject.should_not be_valid
end
end
end
end
传递到此函数时,“subect”始终为零。感谢您的帮助。您正在寻找的可能是共享示例组,这是rSpec中的一项功能,可以使测试干涸
当您有一个具有公共功能的父类,或者正在使用mixin在两个(或更多)类之间共享内容时,通常会使用它。看起来您正在引用。我在那里使用了和实用程序方法,与您的想法类似,使我的电子邮件相关的验证测试干涸 我不认为最好(/可能?)将整个
描述块放在实用方法中;只需在多个方法中引用代码片段,或包含电子邮件地址的数组等长代码位。无论如何,供你参考,以下是我的结论:
Gemfile
# ...
gem 'shoulda-matchers', '1.4.2'
规格/型号/用户规格rb
describe User do
let(:user) { FactoryGirl.create(:user) }
subject { user }
# ...
describe "validations" do
# ...
context "for email" do
it { should validate_presence_of(:email) }
it { should_not allow_value(" ").for(:email) }
it { should validate_uniqueness_of(:email).case_insensitive }
context "when email format is invalid" do
invalid_email_addresses.each do |invalid_address|
it { should_not allow_value(invalid_address).for(:email) }
end
end
context "when email format is valid" do
valid_email_addresses.each do |valid_address|
it { should allow_value(valid_address).for(:email) }
end
end
end
end
end
# ...
def invalid_email_addresses
%w[user@foo,com user_at_foo.org example.user@foo.
foo@bar_baz.com foo@bar+baz.com]
end
def valid_email_addresses
%w[user@foo.com A_USER@f.b.org frst.lst@foo.jp a+b@baz.cn]
end
spec/support/utilities.rb
describe User do
let(:user) { FactoryGirl.create(:user) }
subject { user }
# ...
describe "validations" do
# ...
context "for email" do
it { should validate_presence_of(:email) }
it { should_not allow_value(" ").for(:email) }
it { should validate_uniqueness_of(:email).case_insensitive }
context "when email format is invalid" do
invalid_email_addresses.each do |invalid_address|
it { should_not allow_value(invalid_address).for(:email) }
end
end
context "when email format is valid" do
valid_email_addresses.each do |valid_address|
it { should allow_value(valid_address).for(:email) }
end
end
end
end
end
# ...
def invalid_email_addresses
%w[user@foo,com user_at_foo.org example.user@foo.
foo@bar_baz.com foo@bar+baz.com]
end
def valid_email_addresses
%w[user@foo.com A_USER@f.b.org frst.lst@foo.jp a+b@baz.cn]
end
您确定测试中正在实例化@user吗?无论如何,关于共享示例的建议是好的。