单独运行时传递规则,但在运行完整套件时失败

时间:2017-04-11 09:43:08

标签: ruby-on-rails rspec

此问题已被弃用,因为我删除了gem并自行实现了该功能。

我有一些单独运行时会传递的规格。但是当作为整个套件(或整个spec文件)运行时,只有第一个传递,而其他传递失败。

以下是有问题的公关:https://github.com/jmuheim/base/pull/75

我认为这与添加的clerk gem有关。

只需运行rspec ./spec/features/pages/show_spec.rb,结果就是:

6 examples, 5 failures

Failed examples:
rspec ./spec/features/pages/show_spec.rb:81 # Showing page offers links to browse page by page (previous page / next page) like a book
rspec ./spec/features/pages/show_spec.rb:246 # Showing page versioning generates a diff view
rspec ./spec/features/pages/show_spec.rb:227 # Showing page versioning displays empty versions if available
rspec ./spec/features/pages/show_spec.rb:121 # Showing page versioning displays versions if available (if authorized)
rspec ./spec/features/pages/show_spec.rb:111 # Showing page versioning doesn't display versions if none available

当单独运行它们时,它们通过,例如, rspec ./spec/features/pages/show_spec.rb:121

1 example, 0 failures

似乎存在一些依赖性问题,或者数据库可能无法正确重置,或类似的情况。

以下是问题的屏幕截图,用户(创建者/更新者)似乎不存在:

screenshot

1 个答案:

答案 0 :(得分:1)

我的猜测是您必须有current_user(或User.current),因此clerk可以设置creator / updater属性。

请参阅:clerk source code

在您的规范中,您应该为User.current创建存根。简单的例子:

before do
  test_user = User.create!(name: 'test')
  allow(User).to receive(:current).and return(test_user)
end

编辑:您的测试套件中可能有一些初始化代码设置User.current,但它不会被调用。