Неизвестный ключ метода?ошибка в Rails 2.3.8 Модульное тестирование - PullRequest
3 голосов
/ 13 июля 2010

Я некоторое время писал юнит-тесты для своих моделей. После этого я немного поработал и продолжил писать модульные тесты.

Ранее все мои юнит-тесты работали - успешно. Но теперь, когда я запускаю их, это дает мне

Loaded suite unit/post_test
Started
EEEE
Finished in 0.112698 seconds.

  1) Error:
test_presence_of_body(PostTest):
NoMethodError: undefined method `key?' for #<String:0x103519a88>


  2) Error:
test_presence_of_body_and_title(PostTest):
NoMethodError: undefined method `key?' for #<String:0x1034dd420>


  3) Error:
test_presence_of_title(PostTest):
NoMethodError: undefined method `key?' for #<String:0x1034af750>


  4) Error:
test_title_minimum_width_3(PostTest):
NoMethodError: undefined method `key?' for #<String:0x103481a80>

А мои тесты

class PostTest < ActiveSupport::TestCase


  def test_presence_of_title
    post = Post.new(:body=>"Some content")
    assert !post.save,"Saved post without title"
  end


  def test_presence_of_body
    post = Post.new(:title=>"Some title")
    assert !post.save,"saved post without body"
  end


  def test_presence_of_body_and_title
    post = Post.new(:title=>"Some title",:body=>"")
    assert !post.save,"Saved Post without body"

    post = Post.new(:title => "",:body=>"Some body")
    assert !post.save,"Saved Post without title"

    post = Post.new(:title =>"",:body=>"")
    assert !post.save,"Saved Post with title and body"


  end


  def test_title_minimum_width_3
    post1 = Post.new(:title=>"a",:body=>"This will not be saved")
    assert !post1.save,"Saved post with title length less than 3"

    post2 = Post.new(:title=>"abcd",:body=>"This will be saved")
    assert post2.save,"Couldnot save a valid post record"

    post3 = Post.new(:title=>"abc",:body=>"This will be saved")
    assert post3.save,"Could not save a valid record"
  end
end

1 Ответ

1 голос
/ 13 июля 2010

Если бы это работало, а сейчас - нет, я бы сказал, что вы, возможно, внесли какую-то ошибку в вашу пост-модель.Трудно сказать без обратного следа и кода из вашей пост-модели, но если вы запустили один и тот же код в вашей консоли, вы получите ту же ошибку?

post = Post.new(:body=>"Some content")
post.save

Оттуда вы должны получитьобратная трассировка и место для поиска ошибки.

РЕДАКТИРОВАТЬ:

Затем я попытался бы запустить грабли с флагом --trace, чтобы получить обратную трассировку.

Другая мысльУ меня было то, что это может быть чем-то вроде обезьяньей заплатки.Я не вижу ничего о том, чтобы тестовый модуль изменил метод assert, чтобы принять хеш в качестве второго аргумента.

сначала зайдите в консоль и введите assert false, "error message", и вы должны получить ошибку no method.Если вы получите другой ответ, то вам нужно найти, где может быть метод assert, в противном случае - попробуйте следующее:

require 'test/unit'
include Test::Unit::Assertions
assert false, "error message"

Вы должны увидеть:

Test::Unit::AssertionFailedError: this is a message.
<false> is not true.

В противном случае, я бытакже попробуйте удалить сообщение в конце вашего утверждения и посмотреть, если вы получите ту же ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...