Cucumber, Capybara & Rails 2.3.2 - FactoryGirl 不将记录提交到数据库,但从控制台工作?



我有一个奇怪的问题,当我运行我的(唯一/第一个)黄瓜测试时,其中一部分使用

在我的国家表中创建一个新条目:
Factory.create(:country)

模型不被提交到我的数据库(MySql 5) &由于视图试图加载此数据,我的测试失败了。下面是test.log

中的一个片段
  [4;36;1mSQL (0.1ms)[0m   [0;1mSAVEPOINT active_record_1[0m
  [4;35;1mCountry Create (0.1ms)[0m   [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m
  [4;36;1mSQL (0.1ms)[0m   [0;1mRELEASE SAVEPOINT active_record_1[0m
  [4;35;1mSQL (0.1ms)[0m   [0mSAVEPOINT active_record_1[0m

然而,当我加载rails控制台并运行完全相同的命令即Factory.create(:country)时,记录被提交到数据库。下面是test.log

的输出
[4;36;1mSQL (3.5ms)[0m   [0;1mBEGIN[0m
  [4;35;1mCountry Create (0.2ms)[0m   [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m
  [4;36;1mSQL (1.1ms)[0m   [0;1mCOMMIT[0m
从env.rb

Cucumber::Rails::World.use_transactional_fixtures = false

任何建议都是非常感谢的,我花了两天的时间试图弄清楚这个问题,但没有成功。

您从test.log文件发布的第二行显示了正在插入的记录。我看到您已经关闭了事务性fixture,这很好。

你是偶然使用database_cleaner宝石吗?如果是,它将在测试完成后将数据库回滚到原始状态。这意味着,除非您在运行测试时暂停测试,并且在插入数据之后,否则您将永远不会在数据库中看到它,因为它在测试套件运行后被删除。

我不知道这是导致问题的根源,但它绝对可以解释为什么,当你从控制台中运行一个命令时,你会在DB中看到它,但在运行测试后却看不到。测试数据假定在测试套件执行后被删除,因此您的测试对于每次运行都有一个新的、一致的起点。这是确保您的测试每次都在相同的环境中运行的重要部分,因此可以指望为您提供可靠的结果。

最新更新