2014-12-22 2 views
0

Вот тест:мой Rspec тест держит неудачу, но это выглядит, как он должен работать

Я определяю основные данные здесь:

let('bot_response') { 
    {'bot_response' => 'the response contains <SETPROFILE><KEY>test_key</KEY><VALUE>TEST-SETPROFILE-VALUE</VALUE></SETPROFILE>'} 
    } 

Я бегу метод, который я хочу проверить здесь:

let('bot_response') {BotResponse.act_on_set_profile_tag(
    value, 
    bot_client_id, 
    bot_response 
)} 

Я утверждаю, тестовое условие здесь:

expect(bot_response['bot_response']).to eq("the response contains") 

Вот ключевой частью фактического метода:

bot_response['bot_response'] = bot_response['bot_response'].gsub(/<SETPROFILE>(.*)<\/SETPROFILE>/, '').strip 
return bot_response 

Мой тест не со следующим:

Failure/Error: expect(response['bot_response']).to eq("the response contains") 

    expected: "the response contains" 
     got: "the response contains <SETPROFILE><KEY>test_key</KEY><VALUE>TEST-SETPROFILE-VALUE</VALUE></SETPROFILE>" 

Но я не могу понять, почему. Я новичок в RSpec и на самом деле я не уверен, если я делаю это правильно, особенно let

ответ

2
expect(response['bot_response']).to eq("the response contains") 

Испытание выше ожидает, что две строки, то же самое. Если вы хотите проверить на части строки, попробуйте:

expect(bot_response['bot_response']).to include("the response contains") 

См RSpec matchers другие варианты.

+0

Я хочу, чтобы они были такими же. Он должен лишить то, что находится в теге. – Angela

+0

О, я неправильно понял ваш вопрос. Можете ли вы публиковать спецификационный код непрерывным образом и метод, который вы тестируете. Вы можете удалить ненужные разделы. Я спрашиваю, потому что есть два оператора 'let (bot_response) {...}', одно назначение bot_response ['bot_response']. – roob

Смежные вопросы