这是没有意义的我,希望有人可以提供帮助。 创建使用工厂(看起来相似的测试通过)的用户,当我得到一个测试失败。
在我的测试user_spec.rb文件,用户最初是这样创建的。 使用这种方法的初始化,通过了所有测试。
用户创建
user_spec.rb(无工厂)
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar",
username: "username")
end
大多数其他测试的应用程序使用的工厂。 所以,决定与调用原厂更换以上。
user_spec.rb(与工厂)
describe User do
before do
@user = FactoryGirl.create(:user)
end
厂
工厂看起来是这样的。
factories.rb
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "Person #{n}" }
sequence(:email) { |n| "person_#{n}@example.com" }
password "foobar"
password_confirmation "foobar"
sequence(:username) { |n| "username_#{n}" }
测试失败
下面是使用工厂创建用户时,测试失败。
user_spec.rb
Failures:
1) User when email address is already taken
Failure/Error: it { should_not be_valid }
expected valid? to return false, got true
# ./spec/models/user_spec.rb:101:in `block (3 levels) in <top (required)>'
Finished in 12.61 seconds
178 examples, 1 failure, 2 pending
测试
下面是切换到出厂时未通过测试的一部分。
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
检查用户和USER.DUP的
我首先想到的是可能使用在工厂创建的用户是造成问题的.dup。 这里是@user和@ user.dup当从它们在上述(测试用的输出通过将线puts @user.inspect
和puts user_with_same_email.inspect
到描述块。这两种的puts
是后user_with_same_email.save
)。
没有出厂(测试通过)
@用户
#<User id: nil, name: "Example User", email: "user@example.com",
created_at: nil, updated_at: nil,
password_digest: "$2a$04$I/71i.fpTwfp4PqRwAvU4eUEjEkW/wubx6uVBqfNBShq...",
remember_token: nil, admin: false, username: "username">
user_with_same_email
#<User id: 1178, name: "Example User", email: "USER@EXAMPLE.COM",
created_at: "2012-04-24 06:01:07", updated_at: "2012-04-24 06:01:07",
password_digest: "$2a$04$I/71i.fpTwfp4PqRwAvU4eUEjEkW/wubx6uVBqfNBShq...",
remember_token: "rMS9jM0d4lobLc-A-pTTqA", admin: false, username: "username">
与工厂(测试失败)
@用户
#<User id: 739, name: "Person 67", email: "person_67@example.com",
created_at: "2012-04-24 05:54:28", updated_at: "2012-04-24 05:54:28",
password_digest: "$2a$04$n4tToBVM2elz92cfHPKvte6dfHSBj4jDxG.w6DyKtGUR...",
remember_token: "fy2iifmhXVTFa1__d1dBJg", admin: false, username: "username_67">
user_with_same_email
#<User name: "Person 67", email: "PERSON_67@EXAMPLE.COM",
created_at: nil, updated_at: nil,
password_digest: "$2a$04$n4tToBVM2elz92cfHPKvte6dfHSBj4jDxG.w6DyKtGUR...",
remember_token: "fy2iifmhXVTFa1__d1dBJg", admin: false, username: "username_67">
上面有什么突出的是@user尚未保存不使用的工厂,使用工厂@user时保存,而。 我只是没有看到这如何影响在这种情况下,测试。
任何帮助,将不胜感激。 谢谢!
(上面的代码来自迈克尔·哈特尔的Rails的教程,我工作的一部分的应用程序功能的扩展 ,他提到在教程结束。)