Rails简单的项目研究笔记一

来源:互联网 发布:立体图纸设计软件 编辑:程序博客网 时间:2024/05/02 02:03
这个项目是
   https://github.com/chucai/Ruby-on-Rails-Tutorial-by-Michael-Hartl--v3.2-
  
  有比较网站的Rails测试代码,项目比较小,只有三张表,但是代码结构简单,思路清晰,有非常多的值得借鉴和学习的地方。 
  所有做了这个研究笔记。
  
1.   实现的功能有:
   • 集成了cucumber 和 rspec测试
   • 自己定义的用户认证[没有使用devise]
   • 简单的微博类型的跟随
   • 简单的micropost提交
   • 使用了bootstrap 框架

   
   这个小系统所具备的功能有:
   1, 登录与注册
   2, 跟随某人
   3, 个人首页
   4, 写微博
   
   
   
2. 如何在where中使用占用符?
     private

    # Returns an SQL condition for users followed by the given user.
    # We include the user's own id as well.
    def self.followed_by(user)
      followed_user_ids = %(SELECT followed_id FROM relationships
                            WHERE follower_id = :user_id)
      where("user_id IN (#{followed_user_ids}) OR user_id = :user_id",
            { user_id: user })
    end
    
   
rspec中的subject , it 使用实例

  let(:follower) { FactoryGirl.create(:user) }
  let(:followed) { FactoryGirl.create(:user) }
  let(:relationshipdo
    follower.relationships.build(followed_id: followed.id)
  end 

  subject { relationship }

  it { should be_valid }
  
  describe "follower methods" do
    before { relationship.save }

    it { should respond_to(:follower) }
    it { should respond_to(:followed) }
    its(:follower) { should == follower }
    its(:followed) { should == followed }
  end 

  subject 是it 后默认的变量
  its(:symbol)  是从 let 中取值
   
css选择器 选择页面中的元素
  it { should have_selector('h1',    text: heading) } 


3. rspec如何就行ajax测试
     it "should decrement the Relationship count" do
      expect do
        xhr :delete:destroy, id: relationship.id
      end.should change(Relationship:count).by(-1)
    end 

   
4. 如何写cucumber的测试用例,如下的代码可以参考
   
   FeatureSigning in
  
  ScenarioUnsuccessful signin
    Given a user visits the signin page
    When he submits invalid signin information
    Then he should see an error message
        
  ScenarioSuccessful signin
    Given a user visits the signin page
      And the user has an account
      And the user submits valid signin information
    Then he should see his profile page
      And he should see a signout link

   定义了两个场景, 注册成功和注册失败, 如下是step文件
Given /^a user visits the signin page$/ do
  visit signin_path
end

When /^he submits invalid signin information$/ do
  click_button "Sign in"
end

Then /^he should see an error message$/ do
  page.should have_selector('div.alert.alert-error')
end

Given /^the user has an account$/ do
  @user = User.create(name: "Example User", email: "user@example.com",
                      password: "foobar", password_confirmation: "foobar")
end

When /^the user submits valid signin information$/ do
  visit signin_path
  fill_in "Email",    with: @user.email
  fill_in "Password", with: @user.password 
  click_button "Sign in"
end

Then /^he should see his profile page$/ do
  page.should have_selector('title', text: @user.name)
end

Then /^he should see a signout link$/ do
  page.should have_link('Sign out', href: signout_path)
end
  

原创粉丝点击