【发布时间】:2016-02-15 23:55:35
【问题描述】:
我正在创建一个 Rails 应用程序并刚刚添加了一个文件 (app/spec/models/test_spec.rb ) 5 个新的 rspec 测试:
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会给你很好的输出格式。 -
尝试将您的第一行更改为
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。
标签: ruby-on-rails rspec