我一直使用基于xUnit的测试框架,对于RSpec有些迷茫,但我正在尝试使用它。然而,规范书写的嵌套结构让我在数据库设置和清理方面感到困惑。
根据DatabaseCleaner的README文件:
现在我不能使用事务,因为我在我的代码中使用了它们,所以我只能坚持截断,但这应该不是重点。
我有这个:
根据DatabaseCleaner的README文件:
Spec::Runner.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
现在我不能使用事务,因为我在我的代码中使用了它们,所以我只能坚持截断,但这应该不是重点。
我有这个:
RSpec.configure do |config|
config.mock_with :rspec
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
这里的问题在于,我在subject
或let
块中创建的任何固定装置,在我尝试在后续的describe
或it
块中使用它们时已经消失(从数据库中消失)。
例如(使用Machinist创建固定装置...但这不应该是相关的):
describe User do
describe "finding with login credentials" do
let(:user) { User.make(:username => "test", :password => "password") }
subject { User.get_by_login_credentials!("test", "password") }
it { should == user }
end
end
我在如何嵌套describe
、subject
和其他块方面遇到了困难,所以可能这就是我的问题所在,但基本上,当它尝试从数据库获取用户时,由于已经调用了after(:each)
挂钩,很可能是在let
之后,因此它会失败,因为用户已被删除。