测试服务 Rspec 总是 return 空数组
Test service Rspec always return empty array
我的服务可以完美地手动测试,但我需要编写服务测试。所以我在 rspec
中创建服务测试
require 'rails_helper'
RSpec.describe ReadService do
describe '#read' do
context 'with 4 count' do
let!(:object1) { create(:obj) }
let!(:object2) { create(:obj) }
let!(:object3) { create(:obj) }
let!(:object4) { create(:obj) }
it 'return 2 oldest obj' do
expect(ReadService::read(2)).to eq [report4,report3]
end
end
但是ReadService::read(2)
在测试中return[]
当我手动输入时
ReadService::read(2)
它 return 数组正确地包含两个最旧的对象。我做错了什么?我在测试中调用此服务不正确?
读取服务实现
class ReadService
def self.read(count)
objects = Object.get_oldest(count)
objects.to_a
end
end
发生这种情况是因为您使用了 let!
。这个助手只会在您第一次引用它时创建对象,而您在测试中永远不会这样做。在这种情况下,您应该使用 before :each
或 before :all
块(取决于您的规范在 describe
块中的作用):
before :each do
@object1 = create :obj
@object2 = create :obj
@object3 = create :obj
@object4 = create :obj
end
如果您不需要对对象的引用,您可以在循环中创建它们:
4.times { create :obj }
我的服务可以完美地手动测试,但我需要编写服务测试。所以我在 rspec
中创建服务测试require 'rails_helper'
RSpec.describe ReadService do
describe '#read' do
context 'with 4 count' do
let!(:object1) { create(:obj) }
let!(:object2) { create(:obj) }
let!(:object3) { create(:obj) }
let!(:object4) { create(:obj) }
it 'return 2 oldest obj' do
expect(ReadService::read(2)).to eq [report4,report3]
end
end
但是ReadService::read(2)
在测试中return[]
当我手动输入时
ReadService::read(2)
它 return 数组正确地包含两个最旧的对象。我做错了什么?我在测试中调用此服务不正确?
读取服务实现
class ReadService
def self.read(count)
objects = Object.get_oldest(count)
objects.to_a
end
end
发生这种情况是因为您使用了 let!
。这个助手只会在您第一次引用它时创建对象,而您在测试中永远不会这样做。在这种情况下,您应该使用 before :each
或 before :all
块(取决于您的规范在 describe
块中的作用):
before :each do
@object1 = create :obj
@object2 = create :obj
@object3 = create :obj
@object4 = create :obj
end
如果您不需要对对象的引用,您可以在循环中创建它们:
4.times { create :obj }