ruby-on-rails – 使用Capybara将用户保存在数据库之间?
发布时间:2020-12-17 02:05:55 所属栏目:百科 来源:网络整理
导读:我的问题是我必须为每个单独的水豚测试创建一个新用户并登录. 一个例子如下: require 'spec_helper'describe "users" do describe "user registration" do it "should create a new user and log in" do # Register a new user to be used during the testi
我的问题是我必须为每个单独的水豚测试创建一个新用户并登录.
一个例子如下: require 'spec_helper' describe "users" do describe "user registration" do it "should create a new user and log in" do # Register a new user to be used during the testing process visit signup_path fill_in 'Email',with: 'testuser' fill_in 'Password',with: 'testpass' fill_in 'Password confirmation',with: 'testpass' click_button 'Create User' current_path.should == root_path page.should have_content 'Thank you for signing up!' end end describe "user login" do it "should log in" do # log in visit login_path fill_in 'Email',with: 'testpass' click_button 'Log In' current_path.should == root_path page.should have_content 'Logged in!' end end end 登录测试失败,因为该测试的数据库中不再存在该用户. 这可以通过将两者都放在一个测试中来解决,但我认为这是不好的做法. 另外我还有另一个文件,目前正在使用before_do进行每次测试之间的注册和登录,这看起来也很糟糕……你can see that code here. 为了记录这是我的第一个rails应用程序,所以也许我试图以错误的方式做到这一点.我想尽可能地干掉它.. 在需要用户登录的页面上使用capybara真的很糟糕吗? 解决方法
我这样做了.
require "spec_helper" describe "Users" do subject { page } describe "User Registration" do before { visit signup_path } let(:submit) { "Sign up" } describe "with invalid information" do it "should not create a user" do expect { click_button submit }.not_to change(User,:count) end end describe "with valid information" do before do fill_in "Email",with: "user@example.com" fill_in "Password",with: "foobar12" fill_in "Password confirmation",with: "foobar12" end it "should create a user" do expect { click_button submit }.to change(User,:count).by(1) end describe "after registration" do before { click_button submit } it { should have_content 'Thank you for signing up!' } end describe "after registration signout and login" do let(:user) { User.find_by_email('user@example.com') } before do click_button submit visit signout_path sign_in user # sign_in is a method which u can define in your spec/support/utilities.rb . Define once and use at multiple places. end it { should have_content 'Logged In!' } it { should have_link('Logout') } end end end end #spec / support / utilities.rb def sign_in(user) visit sign_path fill_in "Email",with: user.email fill_in "Password",with: user.password click_button "Log in" end 你的每个describe和it块都会在parent之前的块之后运行,这就是为什么我们需要在上面测试用例中的每个块中click_button. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |