RSpec 对特征类进行单元测试:未定义的方法
RSpec unit testing an eigenclass: undefined method
我正在尝试在 Product model
.
中测试方法 cumulative_cost
#app/models/product.rb
class Product < ActiveRecord::Base
class << self
def cumulative_cost
self.sum(:cost)
end
end
end
所以我会 运行 类似 Product.where(name:"surfboard").cumulative_cost
假设它 return 有两条记录,一条成本为 1000,另一条成本为 150,它将 return => 1150
.
所以这是我写的测试。
RSpec.describe Product, "class << self#cumulative_cost" do
it "should return the total cost of a collection of products"
products = Product.create!([{name:"surfboard", cost:1000}, {name:"surfboard", cost:150}])
expect(products.cumulative_cost).to eq(1150)
end
end
然后当我 运行 我的测试失败了。
undefined method `cumulative_cost' for #<Array:0x007fe3e31844e8>
如有任何帮助,我们将不胜感激。
cumulative_cost
是 Product
模型上的 class 方法。所以,你必须这样称呼它:Product.cumulative_cost
.
错误是说:
undefined method `cumulative_cost' for #<Array:0x007fe3e31844e8>
这意味着,您正在数组上调用此 cumulative_cost
方法,但它未在数组对象上实现,因此会出现此错误。
将您的期望更改为:(根据 SteveTurczyn 的回答)
expect(Product.where(name:"surfboard").cumulative_cost).to eq(1150)
继 K M Rakbul Islam 的回答之后...
products 是一个数组,因为这是 Product.create!
提供的数组 returns。
你的测试应该是...
expect(Product.where(name:"surfboard").cumulative_cost).to eq(1150)
我正在尝试在 Product model
.
cumulative_cost
#app/models/product.rb
class Product < ActiveRecord::Base
class << self
def cumulative_cost
self.sum(:cost)
end
end
end
所以我会 运行 类似 Product.where(name:"surfboard").cumulative_cost
假设它 return 有两条记录,一条成本为 1000,另一条成本为 150,它将 return => 1150
.
所以这是我写的测试。
RSpec.describe Product, "class << self#cumulative_cost" do
it "should return the total cost of a collection of products"
products = Product.create!([{name:"surfboard", cost:1000}, {name:"surfboard", cost:150}])
expect(products.cumulative_cost).to eq(1150)
end
end
然后当我 运行 我的测试失败了。
undefined method `cumulative_cost' for #<Array:0x007fe3e31844e8>
如有任何帮助,我们将不胜感激。
cumulative_cost
是 Product
模型上的 class 方法。所以,你必须这样称呼它:Product.cumulative_cost
.
错误是说:
undefined method `cumulative_cost' for #<Array:0x007fe3e31844e8>
这意味着,您正在数组上调用此 cumulative_cost
方法,但它未在数组对象上实现,因此会出现此错误。
将您的期望更改为:(根据 SteveTurczyn 的回答)
expect(Product.where(name:"surfboard").cumulative_cost).to eq(1150)
继 K M Rakbul Islam 的回答之后...
products 是一个数组,因为这是 Product.create!
提供的数组 returns。
你的测试应该是...
expect(Product.where(name:"surfboard").cumulative_cost).to eq(1150)