ruby-on-rails – Rspec Capybara – 它没有任何记录变化?
发布时间:2020-12-17 01:56:14 所属栏目:百科 来源:网络整理
导读:我想知道,当我尝试测试更新记录时的Capybara Rspec功能时,如果记录被更新,我无法察觉? 例如,我有测试: scenario "updates list" do @student = FactoryGirl.create(:student) @stream.students @student FactoryGirl.create(:account,:account_holder=@stu
我想知道,当我尝试测试更新记录时的Capybara Rspec功能时,如果记录被更新,我无法察觉?
例如,我有测试: scenario "updates list" do @student = FactoryGirl.create(:student) @stream.students << @student FactoryGirl.create(:account,:account_holder=>@student) visit program_stream_path(@program,@stream) click_link "Редактировать список студентов" expect(current_path).to eq edit_students_list_stream_path(@stream) within("#student_0") do fill_in "Имя",:with => "Имя" fill_in "Фамилия",:with => "Фамилия" fill_in "Электронная почта",:with => "randommail@mail.ru" print page.html end #print page.html click_button "Сохранить изменения" expect(current_path).to eq program_stream_path(@program,@stream) expect(page).to have_content "randommail@mail.ru" end 通过此测试,我可以确保没有路由错误并且处理了操作,但我无法检查该记录是否实际更新了? expect(page).to have_content "randommail@mail.ru" 此行会导致失败,但正如您所看到的,我使用此值填充了电子邮件字段.在浏览器中,我可以看到记录已更新.那么,Capybara不适合测试这部分应用程序? 编辑:我在提交后添加了print page.html,相关输出: <table class="table spacer"> <tr> <th>Фамилия и имя</th> <th>Электронная почта</th> <th>Телефон</th> </tr> <tr><td>Surname1 Name1</td> <td>somemail1@mail.ru</td> #email unchanged <td>89112223321</td> </tr> </table> 浏览器操作日志: {"student":[{"id":"378","account":{"name":"testname","surname":"testsurname","email":"randommail@mail.ru","phone":""}}]} UPDATE "accounts" SET "password_digest" = $1,"email" = $2,"updated_at" = $3 WHERE "accounts"."id" = $4 1 ms /Users/slava/RubymineProjects/lms/lib/list.rb:29 COMMIT 电子邮件已更新. 解决方法
感谢这里的评论者,谁给了我一个线索.
我首先想到的可能是Capybara不是为了测试ActiveRecord交互而设计的(因为有模型和控制器RSpec测试),所以我没有尝试非常调试场景本身. 现在我通过测试. @student = FactoryGirl.create(:student) FactoryGirl.create(:account,:account_holder=>@student) 这条线是问题的根源,如果准确说话则创建账户. 我的FactoryGirl学生宣言后来(在关注此规范之前)扩展了 after(:build) {|student| student.account = build(:account,:account_holder =>student )} 所以在这里我在一个@student上有两个帐户工厂(因为学习page.html我发现了两个字段组,我应该有一个),因此更改了第一个组,这是最后创建的帐户. 但在我的模特学生: has_one :account,:as => :account_holder 因此,在第一个帐户记录的提交页面输出数据之后,这是表单上的第二个(并且我更新了第一个,从未显示过) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |