RSpec中“to”方法的问题(未定义方法)

时间:2014-08-24 16:49:39

标签: ruby rspec

这里对rspec完全陌生,这一点很明显。

以下rspec文件失败:

require_relative( 'spec_helper')

describe GenotypingScenario do

  it 'should add genes' do
    scen = GenotypingScenario.new
    gene = Gene.new( "Pcsk9", 989 )
    scen.addGene( gene )
    expect( gene.id).to eq( 989 )
    ct = scen.genes.count
    expect (ct).to equal(1)
    expect (5).to eq(5)
  end
end

具体来说,最后两行expect()行失败,错误如下:

NoMethodError: undefined method `to' for 1:Fixnum

然而,第一个期望线正常。而gene.id绝对是一个FixNum。

Ruby 2.1.2,rspec 3.0.0,Mac OS 10.9.4上的RubyMine。

有什么想法吗?

2 个答案:

答案 0 :(得分:30)

最后两行expect行的间距正在绊倒Ruby解释器。

expect (5).to equal(1)

由Ruby评估为:

expect(5.to(equal(1)))

当你真正的意思是:

expect(5).to(equal(1))

这是调用expect()的返回值,其方法为to; RSpec没有扩展Ruby内置类型。所以你应该把你的最后两个期望改为:

expect(ct).to equal(1)
expect(5).to eq(5)

答案 1 :(得分:1)

当我在测试中找到一条期望json响应not to be empty的行时,我正在使用TDD跟踪Rails API教程。

这就是我写它的方式:

expect(json).not_to_be_empty

我得到了不友好的NoMethodError: undefined method 'not_to_be_empty'

我在这个帖子上找到了接受的答案,它让我大开眼界。

然后我将该行改为:

expect(json).not_to be_empty

我知道你仍然可以寻找差异,欢迎来到RSpec!我删除了not_tobe empty之间的下划线以生成两个单词。它的工作方式就像......很好的代码。