我是Rspec的新手。我正在编写一个测试用例来涵盖模型中的一些操作。这是我的rspec代码
test_cover_image_spec.rb
require 'spec_helper'
describe Issue do
before :each do
@issue = Issue.joins(:multimedia).uniq.first
binding.pry
end
describe '#release_cover_image' do
context 'While making an issue open' do
it 'should make issue cover in S3 accessible' do
put :update, :id => @issue.id, :issue => @issue.attributes = {:open => '1'}
end
end
end
end
@issue总是返回nil。在我的调试器中,Issue.all返回一个空数组。
答案 0 :(得分:0)
要完成这项工作,您必须首先填充测试数据库。
查看factory_girl gem - 它最常用于轻松生成测试数据。
所以(一般的想法是)你将不得不创建几个工厂:
使用它们,在测试运行之前生成issue
对象。
如果您不打算使用factory_girl,那么您应该从issue
块中的before
更改为使用let
:
let(:issue) { Issue.create }
答案 1 :(得分:0)
测试通常是孤立的。这意味着每个测试都需要在运行之前设置对象。测试运行后,常见的测试配置会从测试数据库中删除所有创建的数据。这意味着您需要先创建测试数据,然后才能使用它。
例如:
require 'spec_helper'
describe Issue do
# pass all attributes to create a valid issue
let(:issue) { Issue.create(title: 'Foo Bar') }
describe '#release_cover_image' do
context 'While making an issue open' do
it 'should make issue cover in S3 accessible' do
put :update, id: issue.id, issue: { open: '1' }
expect(issue.reload.open).to eq('1')
end
end
end
end