gpt4 book ai didi

ruby-on-rails - 运行 RSpec 测试时出现 NoMethodError

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:46 25 4
gpt4 key购买 nike

我在尝试使用 RSpec 测试我创建的 gem 时遇到错误 NoMethodError。

这是我的 gem :~/project/gemz/spec/lib/checksomething.rb

class Checkpercentage

#1) what is x% of y?
def self.findAmount(rate, base)
resultAmount = rate * base/100
return resultAmount
end

#2) x is what percentage of y?
def self.findPercent(amount, base)
resultPercent = amount/base * 100
return resultPercent
end

#3) x is y% of what number?
def self.findBase(amount, rate)
resultBase = amount/rate *100
return resultBase
end

end # End Module

这是我的 rspec 测试文件:./project/gemz/spec/lib/checkpercentage_spc.rb

require "spec_helper"
require "checksomething"

RSpec.describe Checkpercentage, '#intNum' do
context "with no integer entered" do
it "must be a number" do
checkpercentage = Checkpercentage.new
checkpercentage.findPercent(100, 200)
expect(checkpercentage.intNum) > 0
end
end
end

我想测试 findPercentage 方法中输入的值是否 > 0。但是,当我在终端 (rspec spec/lib/checkpercentage_spc.rb) 中运行 rspec 命令时,出现以下错误出现:

Failures:

1) Checkpercentage#intNum with no integer entered must be a number
Failure/Error: checkpercentage.findPercent(100, 200)
NoMethodError: undefined method `findPercent' for #<Checkpercentage:0x9956ca4>
# ./spec/lib/checkpercentage_spc.rb:8:in `block (3 levels) in <top (required)>'

Finished in 0.00089 seconds (files took 0.17697 seconds to load)
1 example, 1 failure

Failed examples:
rspec ./spec/lib/checkpercentage_spc.rb:6 # Checkpercentage#intNum with no integer entered must be a number

我对 ruby​​ on rails 还很陌生。谁能指出我正确的方向?感谢您的帮助。

最佳答案

一些事情:

  1. 正如 Santhosh 所写,您声明方法的方式(使用 self)使所有方法成为 Class (Checkpercentage)本身。如果您希望它们在 instance (Checkpercentage.new) 上被调用,您必须从声明中删除 self
  2. 什么是intNum(看起来像Java 但在Ruby 中不存在)?如果我理解正确,您想检查 findPercent(amount, base) 是否返回正数。在这种情况下,the right RSpec syntaxexpect(checkpercentage.findPercent(100, 200)).> 0
  3. Ruby 中 a) 避免使用 camelCase 以支持 camel_case 和 b) 方法返回最后一行的结果被执行了。这意味着您可以按如下方式重写代码:

    class Checkpercentage

    #1) what is x% of y?
    def find_amount(rate, base)
    rate * base/100
    end

    #2) x is what percentage of y?
    def find_percent(amount, base)
    amount/base * 100
    end

    #3) x is y% of what number?
    def find_base(amount, rate)
    amount/rate * 100
    end

    end # end Module

请注意,我已经删除了 self 关键字以向您展示我的第一点的意思 - 现在是您编写的测试中的语法 (checkpercentage.method_name) 将是正确的

此外请注意,您的代码中存在错误 - 它可以工作,但也不是您想要的。希望您编写的测试将帮助您找到并修复它,如果没有请告诉我们!

关于ruby-on-rails - 运行 RSpec 测试时出现 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com