我正在使用RSpec进行测试,但我不知道如何使它变成绿色。

在这种情况下,我有一个名为“ PartType”的模型,其中包含一个名为“ quotation”的属性。

引用的值来自一种形式,因此它将是一个字符串。

为了演示您可以进入控制台并键入:

(1..1000).includes?("50") # false


但..

(1..1000).includes?(50) # true


并且此值可以有小数。所以我需要做一个“ type_cast”。

我的PartType模型上有这个:

before_validation :fix_quotation, :if => :quotation_changed?

protected
  def fix_quotation
    self[:quotation] = quotation_before_type_cast.tr(' $, ' , '.' )
  end


它可以按预期运行,但在测试时会失败。

这是我的part_type_spec.rb

require 'spec_helper'

describe PartType do

  before(:each) do
    @attr = { :title => "Silver", :quotation => 100 }
  end

  it "should create a instance given a valid attributes" do
    PartType.create!(@attr)
  end

  it "should accept null value for quotation" do
    PartType.new(@attr.merge(:quotation => nil)).should be_valid
  end

  it "should accept 0 value for quotation" do
    PartType.new(@attr.merge(:quotation => 0)).should be_valid
  end

end


最后是失败的测试:

Failures:


1)PartType应该创建一个具有有效属性的实例
     失败/错误:PartType.create!(@ attr)
     NoMethodError:
       未定义的方法tr' for 100:Fixnum # ./app/models/part_type.rb:7:in fix_quotation'
     #./spec/models/part_type_spec.rb:10:in'中的块(2个级别)

2)PartType应该接受0值的报价
     失败/错误:PartType.new(@ attr.merge(:quotation => 0))。应该是be_valid
     NoMethodError:
       未定义的方法tr' for 0:Fixnum # ./app/models/part_type.rb:7:in fix_quotation'
     #./spec/models/part_type_spec.rb:18:在'

在0.06089秒内完成
3个例子,2个失败

最佳答案

您的include?片段是错误的,第一个是错误的,第二个是错误的。
before_validation已执行,并且quotation_before_type_cast应该是String,但它是Fixnum。将100更改为'100',将0更改为'0'

关于ruby-on-rails - 测试未通过,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7157131/

10-11 03:47