Rspec "NoMethodError" 来自嵌套模块
Rspec "NoMethodError" from nested module
我 运行 遇到了一个奇怪的错误:
Class:
module AnimalSanctuary
module AnimalInspector
class AnimalPicker
def initialize(number_of_animals, ids)
@number_of_animals = number_of_animals
@ids = ids
end
...
def pick_animals(animal)
end
end
end
测试:
require 'rails_helper'
RSpec.describe AnimalSanctuary::AnimalInspector::AnimalPicker do
describe ".pick_animals" do
context "pick an available animal" do
it "returns animal name" do
expect(AnimalSanctuary::AnimalInspector::AnimalPicker.pick_animals("Dog")).to eq("Dog")
end
end
end
end
我收到以下错误:
NoMethodError:
undefined method `pick_animals' for AnimalSanctuary::AnimalInspector::AnimalPicker:Class
Rspec 调用 class 但不是让我难过的方法。我做错了什么吗?
pick_animals
的定义是一个实例方法。
要调用它,您需要使用 new
方法实例化 class 的对象,如下所示。我已将随机值传递给您的初始值设定项 (1, [1,2]) 但是您可以随意设置它们。:
number_of_animals = 1
ids = [1,2]
AnimalSanctuary::AnimalInspector::AnimalPicker.new(number_of_animals, ids).pick_animals("Dog")
否则,要按照您调用它的方式调用它,您需要使用 self.pick_animals
将其重新定义为 class 方法,如图所示以下:
module AnimalSanctuary
module AnimalInspector
class AnimalPicker
...
def self.pick_animals(animal)
end
end
end
是的pick_animals
是一个实例方法。
您可以在 rspec
中使用以下内容
expect_any_instance_of(nimalSanctuary::AnimalInspector::AnimalPicker).to receive(:pick_animals).with("dogs").to_eq("Dog")
希望对您有所帮助
我 运行 遇到了一个奇怪的错误:
Class:
module AnimalSanctuary
module AnimalInspector
class AnimalPicker
def initialize(number_of_animals, ids)
@number_of_animals = number_of_animals
@ids = ids
end
...
def pick_animals(animal)
end
end
end
测试:
require 'rails_helper'
RSpec.describe AnimalSanctuary::AnimalInspector::AnimalPicker do
describe ".pick_animals" do
context "pick an available animal" do
it "returns animal name" do
expect(AnimalSanctuary::AnimalInspector::AnimalPicker.pick_animals("Dog")).to eq("Dog")
end
end
end
end
我收到以下错误:
NoMethodError:
undefined method `pick_animals' for AnimalSanctuary::AnimalInspector::AnimalPicker:Class
Rspec 调用 class 但不是让我难过的方法。我做错了什么吗?
pick_animals
的定义是一个实例方法。
要调用它,您需要使用 new
方法实例化 class 的对象,如下所示。我已将随机值传递给您的初始值设定项 (1, [1,2]) 但是您可以随意设置它们。:
number_of_animals = 1
ids = [1,2]
AnimalSanctuary::AnimalInspector::AnimalPicker.new(number_of_animals, ids).pick_animals("Dog")
否则,要按照您调用它的方式调用它,您需要使用 self.pick_animals
将其重新定义为 class 方法,如图所示以下:
module AnimalSanctuary
module AnimalInspector
class AnimalPicker
...
def self.pick_animals(animal)
end
end
end
是的pick_animals
是一个实例方法。
您可以在 rspec
中使用以下内容expect_any_instance_of(nimalSanctuary::AnimalInspector::AnimalPicker).to receive(:pick_animals).with("dogs").to_eq("Dog")
希望对您有所帮助