Z
ZHANK
编程在线教程Ruby 教程测试 RSpec/Minitest
工程化

测试 RSpec/Minitest

RSpec describe/it/expect、Minitest 断言、测试驱动开发

测试 RSpec/Minitest

RSpec 是 Ruby 世界最流行的测试框架——describe/it/expect 读起来像英文。Minitest 是 Rails 默认。

学完本章你将: 掌握 RSpec describe/it/expect、Minitest 断言。


RSpec

ruby
# spec/calculator_spec.rb
require "rspec"
require_relative "calculator"

RSpec.describe Calculator do
    describe "#add" do
        it "两个正数相加" do
            calc = Calculator.new
            expect(calc.add(2, 3)).to eq(5)
        end

        it "负数相加" do
            calc = Calculator.new
            expect(calc.add(-1, -1)).to eq(-2)
        end
    end

    describe "#divide" do
        it "除零抛出异常" do
            calc = Calculator.new
            expect { calc.divide(10, 0) }.to raise_error(ArgumentError)
        end
    end

    # 上下文
    context "当用户已登录" do
        before { login_as(user) }
        it { expect(response).to be_successful }
    end
end
bash
rspec spec/calculator_spec.rb

Minitest

ruby
require "minitest/autorun"

class CalculatorTest < Minitest::Test
    def test_add
        calc = Calculator.new
        assert_equal 5, calc.add(2, 3)
        assert calc.add(2, 3) > 0
    end

    def test_divide_by_zero
        calc = Calculator.new
        assert_raises(ArgumentError) { calc.divide(10, 0) }
    end
end