我有一些测试失败了。以下是我的测试:
require 'spec_helper'
describe "Authenticaton" do
let(:base_title){"KS > Kids | "}
subject { page }
describe "for non-signed-in users" do
let(:user) { FactoryGirl.create(:user) }
let(:subject) { FactoryGirl.create(:subject) }
context "in the Subjects controller" do
describe "visiting the edit page" do
before { visit edit_subject_path(subject) }
it { should have_title("#{base_title}Home") }
end
describe "visiting the subject index" do
before { visit subjects_path }
it { should have_title("#{base_title}Home") }
end
end
end
end
这是输出
1)对于访问主题索引的主题控制器中的非登录用户的身份验证
Failure/Error: it { should have_title("#{base_title}#{I18n.t("messages.session.sign_in")}") }
NoMethodError:
undefined method `text' for nil:NilClass
# ./spec/requests/extra_auth_pages_spec.rb:23:in `block (5 levels) in <top (required)>'
2)访问编辑页面的主题控制器中的非登录用户的身份验证
Failure/Error: it { should have_title("#{base_title}Home") }
NoMethodError:
undefined method `text' for nil:NilClass
# ./spec/requests/extra_auth_pages_spec.rb:18:in `block (5 levels) in <top (required)>'
我在这里遗漏了什么?谢谢你的帮助!
答案 0 :(得分:2)
如果没有看到正在测试的代码,很难知道,但有几个可能的原因:
1)请记住,let
是惰性评估的:let
在规范中引用符号之前不会创建对象。对于这种情况,您可能希望在user
发生之前创建visit
实例,但它不会存在,因为永远不会评估user
。这可能会导致身份验证失败。
2)subject
是一个不幸的名称选择,因为RSpec使用subject
来引用正在测试的对象实例。这可能会也可能不会引起问题。