我试图测试我在登录后成功创建了一个新用户(使用authlogic)。我已经为用户添加了几个新字段,所以只是想确保用户保存得当。
问题是尽管创建了一个有效的用户工厂,每当我尝试获取其属性以发布到create方法时,都会省略密码和密码确认。我认为这是authlogic在后台执行的安全方法。这导致验证失败并且测试失败。
我想知道如何解决这个问题?我可以手动输入属性,但这看起来不是很干。
context "on POST to :create" do
context "on posting a valid user" do
setup do
@user = Factory.build(:user)
post :create, :user => @user.attributes
end
should "be valid" do
assert @user.valid?
end
should_redirect_to("users sentences index page") { sentences_path() }
should "add user to the db" do
assert User.find_by_username(@user.username)
end
end
##User factory
Factory.define :user do |f|
f.username {Factory.next(:username) }
f.email { Factory.next(:email)}
f.password_confirmation "password"
f.password "password"
f.native_language {|nl| nl.association(:language)}
f.second_language {|nl| nl.association(:language)}
end
答案 0 :(得分:2)
您绝对无法从User对象中读取密码和password_confirmation。您需要将:password
和:password_confirmation
合并到@user.attributes
哈希。如果您将该哈希存储在与其他工厂定义相同的地方,那么它并不是非常干燥,但它比将其硬编码到测试中更好。