2010-03-25 89 views
3

我试图通过的WatirRSpec的进行集成测试。所以,我在/集成中创建了一个测试文件,并编写了一个测试,它通过factory_girl将测试用户添加到基础中。factory_girl记录在哪里?

的问题是 - 我不能真正与我的测试用户进行登录。我写的测试看起来如下:

... 

before(:each) 
    @user = Factory(:user) 
    @browser = FireWatir::Firefox.new 
end 

it "should login" 
    @browser.text_field(:id, "username").set(@user.username) 
    @browser.text_field(:id, "password").set(@user.password) 
    @browser.button(:id, "get_in").click 
end 

... 

,因为我开始测试并在浏览器中的“性能”,它总是激发了Username is not valid错误。

我已经开始调查,并做了一个小把戏。首先,我开始怀疑工厂是否真的在DB中创建用户。所以在立即打电话给工厂之后,我放了一些puts User.find的东西,只发现用户实际上在DB中是。好吧,但由于用户仍然无法登录,我决定用自己的眼睛看看他是否在DB中。

我厂调用后添加一个sleep权,并去看望在DB的时刻是什么。我被粉碎,看到用户实际上在那里失踪!怎么来的?不过,当我试图在代码中输出用户时,他实际上是从某个地方获取的。 那么factory_girl在运行时所做的记录在哪里呢?test还是dev DB?我不明白。

,如果我跑我的杂种狗在test模式我检查了10倍(这很重要呢?我想是这样,因为我想囤集成测试),如果我database.yml持有特定的正确连接数据。

我正在使用authlogic,如果可以给出任何线索(不,activate_authlogic不会在这里工作)。

+0

你的用户由工厂女生生成被激活或类似的东西? – shingara 2010-03-25 21:07:09

+0

@shingara在我调用Factory的那一刻,构造函数'User'正在构建并应用于db。 – gmile 2010-03-25 21:19:34

+0

是的,但在您的控制器连接期间,它可以通过电子邮件通过示例检查您是否激活它。 – shingara 2010-03-25 21:57:32

回答

2

不知何故,溶液变奇怪 - 我以前把工厂(:所有)块,和所有的东西的工作,因为它应该。

+2

请参阅jbpros答案 - 这是因为测试中的事务,以及不同的数据库连接无法查看彼此的事务。之前(:全部)在每个测试周围的事务之外。 – 2011-09-15 09:22:46

4

不要忘记,运行规范时RSpec的可能是使用transations。 RSpec将在事务中包装规范的执行并在最后回滚。这意味着您将无法从该事务之外(即从另一个SQL连接)查看该记录。

如果你想确保用户记录实际上是由工厂女孩创建的,你可以这样做:

before(:each) 
    @user = Factory(:user) 
    User.find_by_username(@user.username).should_not be_nil 
    @browser = FireWatir::Firefox.new 
end 
+0

谢谢,请牢记这一点。 – gmile 2010-03-29 15:39:30

+0

谢谢谢谢谢谢,解决了两个小时的搜索让我的JS测试工作。 – 2013-01-09 07:14:34

+0

我很高兴它帮助:) – jbpros 2013-01-09 08:56:15

-1

工厂女孩是要建立在你的测试数据库的临时数据库的条目。您的测试数据库将在每次测试后清除。