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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSpec中“to”方法的问题(未定义方法)相关的知识,希望对你有一定的参考价值。

这里对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。

有什么想法吗?

答案

你最后两个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)
另一答案

当我在测试中找到一条预期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之间的下划线来制作两个单词。它的工作方式就像......好的代码。

以上是关于RSpec中“to”方法的问题(未定义方法)的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中使用 RSpec 和 Capybara 时未定义的方法“访问”

未定义方法`permit'表示“1”:字符串 - RSPEC

Rails RSpec中未定义的方法“create”

Rails - RSpec NoMethodError:未定义的方法

Rspec 测试:NoMethodError - nil.Nilclass 的未定义方法“id”

RSpec:#<RSpec::Core::ExampleGroup::Nested_1:0x007fcc2f626d50> 的未定义方法“double”