我有一个奇怪的问题,当我运行我的(唯一/第一个)黄瓜测试时,其中一部分使用
在我的国家表中创建一个新条目: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中看到它,但在运行测试后却看不到。测试数据假定在测试套件执行后被删除,因此您的测试对于每次运行都有一个新的、一致的起点。这是确保您的测试每次都在相同的环境中运行的重要部分,因此可以指望为您提供可靠的结果。