Rspec: test
Slim :可以取代ERB的模版语言。(简单了解了以下,方便写代码,但我觉得不方便读。还是用原生的html)
Webpack管理css: 不再使用app/assets/stylesheets。
以上都是可选的。
RSpec.info/documentation/
Rspec (点击查看文档)
an alternative to MiniTest。
开发者喜欢Rspec,因为测试读起来像英语: the test reads like English.
推荐的测试书: 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文件
如果是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文件。
开始测试:
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不一样:
- 不叫test,叫examples.
- 惯例是每个例子只做一次断言assertion。
- Assertions本身也不一样,expect(actual_value).to eq(expected_value) ,可读性强
- 逻辑强,先要使用使用before do...end把产品加入购物车,然后再断言it "text" do...end。
- 如果相同的数据,进行不同目的的测试。需要用contest "text" do .. end
- 和标准Rails test的区别:describe , contest ,it 之后的文本描述增加了可读性
- rails spec SPEC_OPTS="--format=doc" 显示测试的结构。在.rspec文件内加上 ”--format documentation“
Serving CSS via Webpack
5.1后Rails全面支持Webpack.所以现在可以配置Webpack去服务CSS.
第一步:移动文件scss。
- 1.移动application.scss到javascript/packs
- 2.新建目录packs/css
- 3. 把其他scss移动到css中
原因:
//= 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,通过转化让浏览器支持最新功能。