Ruby基本RSpec测试未通过

Ruby basic RSpec test does not pass

我无法理解为什么以下 Rspec 测试没有通过 -

require "rspec"

require_relative "file-to-be-tested"

describe Customer do
    it "is valid with firstname" do
        customer = Customer.new("handy")
        expect(customer).to be_valid
    end
end

对应的Class定义-

class Customer
    attr_reader :firstname
    def initialize(firstname)
        @firstname = firstname
    end
end

这两个代码片段位于同一文件夹中的不同文件中,因此当我在终端中 运行 ~rspec <first-filename> 时,出现以下错误 -

F

Failures:

  1) Customer is valid with firstname
     Failure/Error: expect(customer).to be_valid
       expected #<Customer:0x007f90e50f3110> to respond to `valid?`
     # ./poodr/poodr_rspec.rb:8:in `block (2 levels) in <top (required)>'

Finished in 0.00551 seconds (files took 0.52876 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./poodr/poodr_rspec.rb:6 # Customer is valid with firstname

您希望 be_valid 测试做什么?问题是客户 class 没有名为 valid 的方法?您的测试正在尝试测试哪个。

如果您在进行测试驱动开发,那么可以推动您的测试:

class Customer
  def valid?
   true
  end
end

您现在有了一个名为 valid 的方法,您的测试将通过。显然它不应该总是正确的,所以你的下一步是扩展有效的定义?。需要做什么检查才能知道客户是否有效?

be_valid 是一种 rspec-rails 方法,但看起来您只是直接使用 rspec。你可以这样做:

require "rspec"

require_relative "file-to-be-tested"

describe Customer do
    it "is valid with firstname" do
        expect { Customer.new('handy') }.to_not raise_error
    end
end