Why are these rspec tests "pending"?
我正在创建一个 Rails 应用程序并刚刚添加了一个文件 (app/spec/models/test_spec.rb
) 带有 5 个新的 rspec 测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| describe Topic do
describe"scopes" do
before do
@public_topic = Topic.create # default is public
@private_topic = Topic.create(public: false)
end
describe"publicly_viewable" do
it"returns a relation of all public topics" do
expect(Topic.publicly_viewable).to eq( [@public_topic] )
end
end
describe"privately_viewable" do
it"returns a relation of all private topics" do
expect(Topic.privately_viewable).to eq( [@private_topic] )
end
end
describe"visible_to(user)" do
it"returns all topics if the user is present" do
user = User.new
expect(Topic.visible_to(user)).to eq(Topic.all)
end
it"returns only public topics if user is nil" do
expect(Topic.visible_to(nil)).to eq(Topic.publicly_viewable)
end
end
end
end |
当我在控制台中运行 "rspec spec" 时,我得到以下输出:
在 8.38 秒内完成(文件加载耗时 1 分 40.84 秒)
18 个示例,1 个失败,5 个待处理
为什么这 5 个例子是"待定"?
- rspec spec 命令应该告诉您哪些测试正在等待。你确定他们是这些吗?
-
此外,对于它的价值,当我在处理一个特定的功能时,我喜欢只运行该部分的单元测试。因此,我会使用 rspec 'spec/models/test_spec.rb' -fd 而不是 rspec spec。然后,一旦我的单元测试通过了,我就会做完整的套件、集成测试等。顺便说一句,-fd 会给你很好的输出格式。
-
@jvillian - 感谢您的回复。当我运行 rspec 'spec/models/test_spec.rb' -fd 我得到这个输出: _/home/nitrous/code/bloccit/spec/models/topic_spec.rb:1:in <top (required)>: uninitialized constant Topic (NameError) from /home/nitrous /code/project/.bundle/gems/rspec-core-3.3.2/lib??/rspec/core/configur??ation.rb:1327:从/home/nitrous/code/bloccit/.bundle/加载gems/rspec-core-3.3.2/lib??/rspec/core/configur??ation.rb:1327:in block in load_spec_files from /home/nitrous/code/bloccit/.bundle/gems/rspec-core- ... _
-
尝试将您的第一行更改为 RSpec.describe Topic, type: :model do。目前,您没有告诉 RSpec 这是一个模型规范。
-
另外,这是您的实际规格文件吗?您缺少 require 'rails_helper'。而且,我认为您需要执行 before(:each) do 或 before(:all) do 而不仅仅是 before do。如果这不是整个文件,请发布整个文件。
-
@jvillian - 使用 before do 时,它隐式使用 before(:each) do (至少在我个人使用的每个版本的 RSpec 中)。很好地抓住了丢失的 require。
-
@MichaelCruz - 足够公平的 before do 位。当事情不顺利的时候,我猜我有点喜欢束手无策的人!
Rspec 会自动在 spec/ 的其他子目录中为您创建规范。您正在整个 spec/ 目录上运行规范,其中包括自动生成的控制器规范、视图规范、路由规范等。这些都带有待处理的示例。如果您只想运行此文件中的规范,请运行 rspec spec/models/test_spec.rb
- 感谢您的回复!当我运行 rspec spec/models/test_spec.rb 我得到这个输出: _/home/nitrous/code/project/spec/models/topic_spec.rb:1:in <top (required)>: uninitialized constant Topic (NameError) from /home/nitrous /code/project/.bundle/gems/rspec-core-3.3.2/lib??/rspec/core/configur??ation.rb:1327:从/home/nitrous/code/bloccit/.bundle/加载gems/rspec-core-3.3.2/lib??/rspec/core/configur??ation.rb:1327:in block in load_spec_files from /home/nitrous/code/bloccit/.bundle/gems/rspec-core- ... _
-
请参阅我对 OP 的评论。