将实例变量分配给工厂女孩创建的持久化数据的行为
Behavior of assigning instance variable to persistent data that factory girl creates
我在其他地方看到过这种表示法:@user = FactoryGirl.create(:user)
,但无法弄清楚这个实例变量的行为方式。
具体来说,我想知道这个实例变量的行为。例如,我目前正在 RSpec 中创建集成测试。在其中一个测试中,我试图将一个实例变量分配给我的视频实例 class:
@video = FactoryGirl.create(:video, title: "Test title")
此时我可以轻松访问视频实例的不同属性(例如,使用 @video.title
)。
但是,我正在创建一个集成测试,以确保用户可以清除表单中的 "title" 字段,并且当视频更新时,标题会在数据库中被删除。例如,
click_link "Edit"
fill_in "Title", with: ""
click_button "Update Video"
expect(find('#title')).to_not have_content "Test title"
由于某种原因,页面显示正确,但是当我尝试使用实例变量访问实例时,没有发生任何变化:print @video.title
returns "Test title"
奇怪的是,在不同的集成测试中,我使用类似的过程来更新视频实例的属性(例如,"Updated Test title")。然后我测试了网页中的属性是否正确更新,他们确实更新了,但这次实例变量也反映了这一点(使用 print @video.title
)。
猜猜为什么会这样?
解决方案是使用 @video.reload.title
,从数据库更新记录。
当您创建 @video
它现在与数据库断开连接更改(视频对象中的静态副本)reload
将导致它从数据库中自行刷新,显示自其初始以来所做的更改作业。
资源包括:
- binarapps.com/blog/rspec-reload-objects
- everydayrails.com/2015/04/05/rspec-assigns-rails-testing.html
- http://spaghettirefactory.blogspot.com/2015/01/reload-stale-objects-in-finnicky-rails.html
(致谢@SergiiK 和@engineersmnky,他们在上述评论中回答了问题。)
我在其他地方看到过这种表示法:@user = FactoryGirl.create(:user)
,但无法弄清楚这个实例变量的行为方式。
具体来说,我想知道这个实例变量的行为。例如,我目前正在 RSpec 中创建集成测试。在其中一个测试中,我试图将一个实例变量分配给我的视频实例 class:
@video = FactoryGirl.create(:video, title: "Test title")
此时我可以轻松访问视频实例的不同属性(例如,使用 @video.title
)。
但是,我正在创建一个集成测试,以确保用户可以清除表单中的 "title" 字段,并且当视频更新时,标题会在数据库中被删除。例如,
click_link "Edit"
fill_in "Title", with: ""
click_button "Update Video"
expect(find('#title')).to_not have_content "Test title"
由于某种原因,页面显示正确,但是当我尝试使用实例变量访问实例时,没有发生任何变化:print @video.title
returns "Test title"
奇怪的是,在不同的集成测试中,我使用类似的过程来更新视频实例的属性(例如,"Updated Test title")。然后我测试了网页中的属性是否正确更新,他们确实更新了,但这次实例变量也反映了这一点(使用 print @video.title
)。
猜猜为什么会这样?
解决方案是使用 @video.reload.title
,从数据库更新记录。
当您创建 @video
它现在与数据库断开连接更改(视频对象中的静态副本)reload
将导致它从数据库中自行刷新,显示自其初始以来所做的更改作业。
资源包括:
- binarapps.com/blog/rspec-reload-objects
- everydayrails.com/2015/04/05/rspec-assigns-rails-testing.html
- http://spaghettirefactory.blogspot.com/2015/01/reload-stale-objects-in-finnicky-rails.html
(致谢@SergiiK 和@engineersmnky,他们在上述评论中回答了问题。)