2015-03-21 5 views
1

Я получаю сообщение об ошибке NoMethodError при попытке использовать RSpec для тестирования созданного нами драгоценного камня.NoMethodError при запуске теста RSpec

это мой драгоценный камень: ~/проект/Gemz/спецификации/Библиотека/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 

Я хочу, чтобы проверить, если значения enterend в методе findPercentage является> 0. Однако, когда я бег Rspec команды в моем терминале (RSpec спецификации/Библиотека/checkpercent age_spc.rb) следующее сообщение об ошибке появляется:

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 

Я довольно новый на рубин на рельсах. Может ли кто-нибудь указать мне правильное направление? Любая помощь приветствуется.

+0

@Santhosh Я уже делаю это на предыдущей строке, присваивая класс переменной «checkpercentage»: - checkpercentage = Checkpercentage.new - checkpercentage.findPercent (100, 200) –

+0

Отметьте мой ответ. – Santhosh

+0

Методы класса могут быть вызваны только для константы класса. Когда вы создаете объект, методы, которые вы определили, недоступны, так как это «экземпляр», с которым вы говорите, а не «определение класса». – JensDebergh

ответ

0

Пара вещей:

  1. Как Santhosh писал, как вы заявили свои методы (с использованием self) делает все из них способы Class (Checkpercentage) сам. Если вы хотите, чтобы их вызывали на instance (Checkpercentage.new), вы должны удалить self из декларации.
  2. Что такое intNum (выглядит как Java, но его нет в Ruby)? Если я правильно понял, вы хотите проверить, что findPercent(amount, base) возвращает положительное число. В этом случае the right RSpec syntax - expect(checkpercentage.findPercent(100, 200)).to be > 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) будет правильно

Обратите внимание, кроме того, что есть ошибка в вашем коде - он работает, но не так как вы хотите его тоже. Надеюсь, тесты, которые вы напишете, помогут вам найти его и исправить, если не сообщите нам об этом!

+0

Да, с тестами я вижу, что с моим кодом что-то не так, но я все еще пытаюсь найти именно то, что. Я все равно буду пытаться, спасибо за помощь снова :) –

+0

@VictorAngelo В любое время, мое удовольствие! Чтобы найти ошибку, попробуйте провести очень простой тест, например, «ожидать» (checkpercentage.find_percent (100, 200)) до равного (0,5) 'например.Это должно сказать вам, что вы ожидали, и что вы получили, и вы можете двигаться оттуда. – sebkkom

Смежные вопросы