Rspec: test

Slim :可以取代ERB的模版语言。(简单了解了以下,方便写代码,但我觉得不方便读。还是用原生的html)

Webpack管理css: 不再使用app/assets/stylesheets。

以上都是可选的。

总文档连接:

RSpec.info/documentation/


Rspec  (点击查看文档)

an alternative to MiniTest。

开发者喜欢Rspec,因为测试读起来像英语: the test reads like English.

        RSpec.describe Cart ​do​
​   let(​:cart​)     { Cart.create }
​   let(​:book_one​) { products(​:ruby​) }
​   let(​:book_two​) { products(​:two​) }
​   before ​do​
​     cart.add_product(book_one).save!
​     cart.add_product(book_two).save!
​   ​end​
​   it ​"can have multiple products added"​ ​do​
​     expect(cart.line_items.size).to eq(2)
​   ​end​
​   it ​"calculates the total price of all products"​ ​do​
​     expect(cart.total_price).to eq(book_one.price + book_two.price)
​   ​end​
​ ​end​ 

推荐的测试书: Effective Testing with RSpec 3. (有详解。)

以下只是基本用法,和如何配置。

1. 添加gem。

group :development, :test do

gem 'rspec-rails'

end

2 .安装rspec

>rails generate rspec:install

create .rspec

create spec

create spec/spec_helper.rb

create spec/rails_helper.rb

3. 运行代码,查看是否安装成功

> bin/rails spec   #No examples found.

4. 还有一行代码:bundle exec rspec  在bin文件夹中加入spec文件

如果只运行子集subset:
如果是model:  bundle exec rspec spec/models,

如果是control中的AccountController

bundle exec rspec spec/controllers/accounts_controller_spec.rb

⚠️:可以使用gem 'spring-commands-rspec'提高应用的启动速度。改为执行:

bundle exec spring binstub rspec

5. Generator.(详细文档: list of all generators.)

安装后,如果使用rails generate model 和 rails generate controller
 RSpec将生成 spec文件代替Test::Unit test文件。

也可以独立使用RSpec,例如运行rails generate rspec:model会生成一个model spec 。
bin/rails generate spec:model Cart
​  create  spec/models/cart_spec.rb

开始测试:

1. route

如果是从程序开始便使用了RSpec.那么固件在spec/fixtures中。本例子是在中途使用的,所以需要在spec/rails_helper.rb 中配置导向路径:

把config.fixture_path = "#{::Rails.root}/spec/fixtures" 改成

config.fixture_path = "#{::Rails.root}/test/fixtures"

2. cart_spec.rb

subject, let都是声明变量,但subject是核心。let是辅助。

test本身和标准的Rails test不一样:

  1. 不叫test,叫examples.
  2. 惯例是每个例子只做一次断言assertion。
  3. Assertions本身也不一样,expect(actual_value).to eq(expected_value) ,可读性强
  4. 逻辑强,先要使用使用before do...end把产品加入购物车,然后再断言it "text" do...end。
  5. 如果相同的数据,进行不同目的的测试。需要用contest "text" do .. end
  6. 和标准Rails test的区别:describe , contest ,it 之后的文本描述增加了可读性
  7. rails spec SPEC_OPTS="--format=doc"  显示测试的结构。在.rspec文件内加上  ”--format documentation“
RSpec.describe Cart, type: :model do
  fixtures :products
  subject(:cart) {Cart.new} #声明了变量cart,之后会用到。
  let(:book_one) { products(:ruby)}   #let 声明了其他变量
  let(:book_two) { products(:two)}
  describe "#add_product" do
    context "adding unique products" do
      before do
        cart.add_product(book_one).save!
        cart.add_product(book_two).save!
      end
      it "has two line items" do
        expect(cart.line_items.size).to eq(2)
      end
      it "has a total price of the two items" do
        expect(cart.total_price).to eq(book_one.price + book_two.price)
      end
    end
    context "adding duplicate products" do
      before do
        cart.add_product(book_one).save!
        cart.add_product(book_one).save!
      end
      it "has one line item" do
        expect(cart.line_items.size).to eq(1)
      end
      it "has a line item with a quantity of 2" do
        expect(cart.line_items.first.quantity).to eq(2)
      end
      it "has a total price of twice the product's price" do
        expect(cart.total_price).to eq(book_one.price * 2)
      end
    end
  end  #RSpec.describe的块。
  #subject和let看起来做了一样的工作,区别是subject对象是测试的焦点,let是辅助
  # pending "add some examples to (or delete) #{__FILE__}"
end

Serving CSS via Webpack

5.1后Rails全面支持Webpack.所以现在可以配置Webpack去服务CSS.

点击:文档代码

第一步:移动文件scss。

  1. 1.移动application.scss到javascript/packs
  2. 2.新建目录packs/css
  3. 3. 把其他scss移动到css中
第二步:在application.scss中,import所有scss文件。例子:@import "css/adim.scss";

原因:

//= require_tree. 和//= require_self。这两行代码的作用是告诉Sprockets包含所有scss文件。但是Webpack不支持这两条directives,所有需要手动添加scss文件到application.scss中。CSS文件实际是Sass文件,Sass文件可以使用@import载入外部文件。所以,我们要一条条的载入外部scss文件。

第三步: 改变application layout。然后从新启动程序。

把stylesheet_link_tag改为stylesheet_pack_tag

第四步,安装cssnext。yarn add postcss-cssnext

解释:cssnext.(点击查看)一个css插件,可以帮助使用最新的css syntax,通过转化让浏览器支持最新功能。

5-11敏捷开发rails的章节: Rspec(使用方法) ,Slim(使用操作简介)的更多相关文章

  1. IT168关于敏捷开发采访

    1.我们知道敏捷开发是一套流程和方法的持续改进,通过快速迭代的方式交付产品,从而控制和降低成本.但是在实行敏捷初期,往往看不到很好的效果.这里面,您觉得问题主要出在哪?团队应如何去解决问题?金根:我认 ...

  2. [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum

    [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum 1,Scrum概述 上篇中提到敏捷开发有两种主流的方法,一个是XP,另一个是Scrum,本篇简要介绍Scrum方法.Scrum是 ...

  3. 用户故事驱动的敏捷开发 – 2. 创建backlog

    本系列的第一篇[用户故事驱动的敏捷开发 – 1. 规划篇]跟大家分享了如何使用用户故事来帮助团队创建需求的过程,在这一篇中,我们来看看如何使用这些用户故事和功能点形成产品backlog.产品backl ...

  4. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  5. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  6. 实验三 敏捷开发与XP实践(改)

    ---恢复内容开始--- 一.敏捷开发与XP 二.编码标准 1.编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性.程序的版式追求清晰.美观,是程序风格的重要因素.单击Ec ...

  7. 敏捷开发之道(三)极限编程XP续

    上次的博文敏捷开发之道(二)极限编程XP中,我们了解了XP的实践中的其中四个,今天我们来一起学习一下剩余的实践. --接上文 5).结对编程 结对编程就是由结对的开发人员使用同一台电脑共同完成一项任务 ...

  8. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  9. CI/CD持续集成/持续部署 敏捷开发

    敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...

随机推荐

  1. [WPF]WPF开发方法论

    纵观Windows GUI应用程序开发方法,从Windows API.MFC到Visual Basic再到.NET Framework,WPF的开发方法论是在.NET Framework方法论的基础上 ...

  2. 常用linux命令:locate 命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  3. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  4. 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片

    实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...

  5. c++第十六天

    p99~p101: 1.迭代器的指向:容器内的元素或者尾元素的下一位. 2.迭代器与整数相加减返回值为移动了若干位置的迭代器. 3.迭代器间相加减返回值则是类型为 difference_type 的带 ...

  6. c++第十一天

    <c++ primer, 5E> 第68页到第81页,笔记: 1.读取未知量的string对象示例 #include<iostream> using std::cin; usi ...

  7. Django框架之跨站请求伪造

    跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF, 是一种挟制用户在 ...

  8. .net Core 中将原MVC中的 MvcHtmlString转换

    public static IHtmlContent CustomLabelFor<TModel, TProperty>(this IHtmlHelper helper, Expressi ...

  9. 04: linux基础总结

    目录: 1.1 Red Hat Linux 安装及服务控制 1.2 目录和文件管理 1.3 安装及管理程序 1.4 账号和权限管理 1.5 磁盘和文件管理 1.6 进程和计划任务管理 1.7 Linu ...

  10. UVa 10285 Longest Run on a Snowboard - 记忆化搜索

    记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...