这里对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。
有什么想法吗?
答案 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_to
和be empty
之间的下划线以生成两个单词。它的工作方式就像......很好的代码。