【问题标题】:Ruby basic RSpec test does not passRuby 基本 RSpec 测试未通过
【发布时间】:2015-03-26 06:25:36
【问题描述】:

我无法理解为什么以下 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 Customer
    attr_reader :firstname
    def initialize(firstname)
        @firstname = firstname
    end
end

这两个代码 sn-ps 位于同一文件夹中的不同文件中,所以当我在终端中运行 ~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

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      您希望 be_valid 测试做什么?问题是 Customer 类没有称为有效的方法?您的测试正在尝试测试的内容。

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

      class Customer
        def valid?
         true
        end
      end
      

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多