【问题标题】:Rails "unknown command" ArgumentErrorRails“未知命令”ArgumentError
【发布时间】:2015-04-12 22:48:34
【问题描述】:

我正在编写 Michael Hartl 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>'

“test/models/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.

如果我取消注释“dependent: :destroy”语句,我会收到这个“未知命令”错误。任何人都可以就如何最有可能生成此错误提供一些指导,什么是 rails 上下文中的“命令”(不包括 rails 控制台)以及首先在哪里尝试解决它(模型?控制器?)。谢谢。

【问题讨论】:

  • 从未参加过测试,但测试名称中不应该有下划线吗?让它"associated_microposts_should_be_destroyed"?
  • 模型、数据库和测试本身将是我首先要看的地方,因为这就是您要测试的内容。确保用户和微博之间存在关联,并且您运行了 rake db:migrate
  • 你能把整个测试文件贴出来吗? (尽可能多地删除它,同时仍然保留错误)

标签: ruby-on-rails ruby railstutorial.org argument-error


【解决方案1】:

您的 assert_difference 调用中有错字。

assert_difference 'Micropost.count" ...

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

【讨论】:

  • 感谢您的收获。不过,这只是写问题时的错字。该错误与此疏忽无关。
【解决方案2】:

我重新处理了我的代码,并通过删除每个测试注意到,即使在失败日志中只报告了一个测试,我也可以通过分别删除位于底部的两个不同测试之一来摆脱失败我的测试文件如下:

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'”,以提高我对未来 Rails 测试环境的理解。

【讨论】:

    【解决方案3】:

    我刚才也遇到了同样的问题,还有这个;

    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 的差异。

    【讨论】:

      猜你喜欢
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多