这应该非常简单,但由于某些原因我的测试失败了,请考虑以下模型位:
class User < ActiveRecord::Base
def active!
update_attribute(:active, true)
end
end
控制器:
def activate
user = User.find_by_uuid(params[:id])
user.active!
puts "id #{user.id}"
end
测试:
describe 'activate user' do
let(:user) { FactoryGirl.create(:user) }
before do
sign_in user
visit activate_user_path(id: user.uuid)
puts "id #{user.id}"
end
it 'should be true' do
save_and_open_page
user.active.should be_true
end
end
此测试失败:
expected: true value
got: false
但是当我使用浏览器时,用户会被激活而没有问题。我究竟做错了什么?这真的看起来像一个狡猾的测试,但仍然没有通过,我花了一个多小时尝试不同的东西,没有一个工作。
答案 0 :(得分:2)
问题是规范仍然保留了User
变量,该变量是通过FactoryGirl创建的,并且不知道数据库中是否已更改。只需重新加载user
,它就应该有效:
user
顺便说一下。如果it 'should be true' do
save_and_open_page
user.reload.active.should be_true
end
是布尔值,你也可以用这种方式进行规范(读得更好):
active