1

我是集成测试的新手,虽然我已经为我的模型和控制器做了很多单元测试。但现在我想测试整个堆栈。(我不想用 Cucumber,因为没有客户,我可以看代码)

这是我的(简化的)规范

describe ArticlesController, "#show" do
  before do
    @article = Factory :article, :title => "Lorem ipsum"
  end

  it "should show the article page" do
    visit article_path(:id => @article)
    page.should have_content("Lorem ipsum")
  end
end

规范通过了,但是一旦我添加:js => trueit "should show the article page", :js => true do, anActiveRecord::RecordNotFound就会被抛出。如果我use_transactional_fixtures在我的配置中禁用,它会再次工作,但这会破坏很多其他测试。是否有其他解决方案,或者我可以仅为我的集成测试禁用 transactional_fixtures?

谢谢阅读!:)

4

1 回答 1

1

您需要use_transactional_fixtures为集成测试设置 = false。正如您所发现的,这会导致其他假设您的表一开始是空的测试的问题。

你可以试试database_cleaner gem。中的典型配置spec_helper如下所示:

RSpec.configure do |c|
  c.before(:suite) do
    DatabaseCleaner.start
  end

  c.after(:suite) do
    DatabaseCleaner.clean
  end
end
于 2011-08-31T19:41:34.740 回答