2015-04-12 70 views
0

我正在使用Michael Hartl rails教程。在运行测试中,我得到以下错误:Rails“未知命令”参数错误

Error: 
UserTest#test_associated_microposts_should_be_destroyed: 
ArgumentError: unknown command 'a' 
test/models/user_test.rb:73:in 'test' 
test/models/user_test.rb:73: in 'block in <class:UserTest>' 

“测试/模型/ user_test.rb”如下:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
@user.destroy 
end 

测试很简单,只针对测试下面的行在我的模型(user.rb)

has_many :microposts, dependent: :destroy 

如果我评论了这句话如下:

has_many :microposts#, dependent: :destroy 

我,一如预期,得到

Failure: [...] "Micropost.count" didn't change by -1. Expected:38 Actual 39. 

如果我取消了“依赖:破坏”的声明,我得到这个“未知的命令”的错误。任何人都可以提供一些关于如何最有可能生成此错误的指导,关于rails(不包括rails控制台)的上下文中的“命令”是什么以及要在哪里首先尝试解决它(Models?Controllers?)。谢谢。

+0

从来没有进入测试,但不应该在测试名称中有下划线?为了让它“associated_microposts_should_be_destroyed”'? –

+0

模型,数据库和测试本身将是我会先看的地方,因为那就是你正在测试的东西。确保用户和微博之间有关联,并且你运行了rake db:migrate – forthowin

+0

你可以发布整个测试文件吗? (尽可能多地删除它,同时仍然保留错误) –

回答

2

您的assert_difference调用中存在拼写错误。

assert_difference 'Micropost.count" ... 

注意开始的单引号和结尾的双引号。

+0

感谢您的收获。这只是写错时的错字。该错误与此疏忽无关。 – Bastien

0

我重新计算了我的代码,发现删除了每个测试,即使只有一个测试报告在失败日志中,我可以通过删除两个不同的测试我的测试文件底部如下:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 

test "authenticated? should return false for a user with nil digest" do 
    assert_not @user.authenticated?(:remember, '') 
    end 
end 
. 
. 

问题是,其中一个“结束”是错位的。该文件应该是:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 
end 
test "authenticated? should return false for a user with nil digest" do 
    assert_not @user.authenticated?(:remember, '') 
end 

我仍然有兴趣了解为什么检索到的“未知的命令‘A’”故障日志,以提高我的轨测试环境的道路的认识。

0

我刚才也有同样的问题,

截至micropost_test.rb顶部有此设置

//first post creation for @user 
def setup 
    @user = users(:michael) 
    # This code is not idiomatically correct. 
    @micropost = @user.microposts.build(content: "Lorem ipsum") 
end 

//second post creation in test for @user 
test "associated microposts should be destroyed" do 
    @user.save 
    @user.microposts.create!(content: "Lorem ipsum") 
    assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 

目前已经发布的讯息,所以当用户保存在测试另一篇文章,则该用户实际上是与他删除了2个职位都不见了。所以我们期望的应该是-2的差异。