【发布时间】:2016-03-05 02:02:02
【问题描述】:
当我运行以下测试时
RSpec.describe LessonsController, type: :controller do
describe 'GET / index' do
let(:lesson1) {FactoryGirl.create(:lesson)}
let(:lesson2) {FactoryGirl.create(:lesson)}
it 'returns an http success' do
get :index
expect(response).to be_success
end
it 'returns all the lessons' do
get :index
expect(assigns[:lessons]).to eq([])
expect(assigns[:lessons]).to eq([lesson1, lesson2])
end
end
end
第二个期望 expect(assigns[:lessons]).to eq([lesson1, lesson2]) 以 expected: [#<Lesson id:...>, #<Lesson id:...>] got: #<ActiveRecord::Relation []> 失败。
但是,当我运行以下测试时,一切都通过了
RSpec.describe LessonsController, type: :controller do
describe 'GET / index' do
let(:lesson1) {FactoryGirl.create(:lesson)}
let(:lesson2) {FactoryGirl.create(:lesson)}
it 'returns an http success' do
get :index
expect(response).to be_success
end
it 'returns all the lessons' do
get :index
expect(assigns[:lessons]).to eq([lesson1, lesson2])
end
end
end
我想知道为什么第二次测试没有失败?我原以为第二个规范也会以与第一个相同的原因失败。
我相信这可能是由于 let 声明。
话虽如此,我正在运行 rspec-rails、factory_girl_rails 和 Rails 4。我不认为这是由于污染,因为即使我单独运行测试(焦点),这种影响仍然存在。
【问题讨论】:
-
您是否在规范之间清理数据库?否则是由于测试污染。 github.com/DatabaseCleaner/database_cleaner
-
“第二个期望”到底是什么?
[]在技术上是该文件中的第二个还是第二个规范中的第二个?请添加一些行号和实际错误输出。 -
如何添加行号?我对其进行了编辑以进行澄清。
-
你能添加你的控制器的代码吗?
标签: ruby-on-rails ruby-on-rails-4 rspec rspec-rails