Home / IELTS / Speaking / IELTS Speaking Mock Test

IELTS Speaking Mock Test

IELTS Speaking Mock Test tailwind.config = { theme: { extend: { colors: { primary: '#0078FF', secondary: '#F0F2F5', dark: '#181818', } } }, darkMode: 'class' } @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); .test-content::-webkit-scrollbar { width: 8px; } .test-content::-webkit-scrollbar-track { background: rgba(0,0,0,0.05); border-radius: 8px; } .test-content::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.1); border-radius: 8px; } .test-content::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.2); } .message-input:focus { outline: none; } audio::-webkit-media-controls-panel { background-color: rgba(255, 255, 255, 0.7); } audio::-webkit-media-controls-play-button, audio::-webkit-media-controls-timeline { color: #0078FF; } /* Color scheme for dark mode */ .dark audio::-webkit-media-controls-panel { background-color: rgba(40, 40, 40, 0.7); } .band-score { transition: all 0.3s ease; } .evaluation-container { max-height: 0; overflow: hidden; transition: max-height 0.5s ease-out; } .evaluation-container.show { max-height: 1000px; } #testSelector { margin: 0px; padding: 15px; padding-right: 50px; /*text-align: right;*/ background-color: white; color: #007aff; border: none; font-size: 20px; border-radius: 200px; cursor: pointer; outline: none; }
IELTS Speaking Mock Test
Set 1: Home & Family Set 2: Work & Education Set 3: Leisure & Hobbies Set 4: Travel & Places Set 5: Technology & Media Set 6: Health & Lifestyle Set 7: Environment & Nature Set 8: Culture & Traditions Set 9: Society & Relationships Set 10: Goals & Achievements
0:00
<!--
-->
// Initialize dark mode if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.documentElement.classList.add('dark'); } window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { if (event.matches) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }); // IELTS Speaking Test Questions - 10 sets with 3 parts each const testQuestionSets = [ // Set 1: Home & Family { name: "Home & Family", parts: [ { name: "Introduction & Interview", questions: [ "Where do you live? Do you like living there?", "Do you live in a house or an apartment? Why?", "What's your favorite room in your home?", "Tell me about your family. Do you have any siblings?", "How much time do you spend with your family?" ] }, { name: "Individual Long Turn", questions: [ "Describe a family celebration that you remember well. You should say:\n- when this celebration took place\n- what you were celebrating\n- who was present\n- and explain why you remember this celebration so well." ] }, { name: "Two-way Discussion", questions: [ "How important is family in your culture?", "Do you think family structures have changed in recent years?", "What are the advantages and disadvantages of living with extended family?", "How does technology affect family relationships nowadays?" ] } ] }, // Set 2: Work & Education { name: "Work & Education", parts: [ { name: "Introduction & Interview", questions: [ "What do you do for work or study?", "Why did you choose this field?", "What do you like or dislike about your job/studies?", "What was your favorite subject in school?", "Do you think education is important? Why?" ] }, { name: "Individual Long Turn", questions: [ "Describe a teacher who has influenced you. You should say:\n- who this teacher was\n- what subject they taught\n- how they taught you\n- and explain why they influenced you so much." ] }, { name: "Two-way Discussion", questions: [ "How has education changed in recent years in your country?", "Do you think online learning is as effective as traditional classroom learning?", "What skills do you think are most important for success in the workplace?", "How might jobs change in the future due to technology?" ] } ] }, // Set 3: Leisure & Hobbies { name: "Leisure & Hobbies", parts: [ { name: "Introduction & Interview", questions: [ "What do you like to do in your free time?", "How did you become interested in this hobby?", "Do you prefer indoor or outdoor activities?", "What hobbies were popular when you were a child?", "Do you think hobbies are important? Why or why not?" ] }, { name: "Individual Long Turn", questions: [ "Describe a skill you would like to learn. You should say:\n- what this skill is\n- how you would learn it\n- how difficult it would be to learn\n- and explain why you want to learn this skill." ] }, { name: "Two-way Discussion", questions: [ "Why do people need hobbies?", "Do you think people have enough leisure time nowadays?", "How have people's leisure activities changed over time?", "Do you think hobbies can help people in their careers? How?" ] } ] }, // Set 4: Travel & Places { name: "Travel & Places", parts: [ { name: "Introduction & Interview", questions: [ "Have you traveled much in your own country?", "What kind of transportation do you prefer for long journeys?", "Do you like visiting other countries?", "What's your favorite holiday destination?", "What do you like to do when you travel?" ] }, { name: "Individual Long Turn", questions: [ "Describe a place you have visited that you found interesting. You should say:\n- where this place is\n- when you visited it\n- what you did there\n- and explain why you found it interesting." ] }, { name: "Two-way Discussion", questions: [ "How has travel changed in the last few decades?", "What are the benefits of traveling to other countries?", "Do you think tourism can have negative effects on local communities?", "How might travel and tourism change in the future?" ] } ] }, // Set 5: Technology & Media { name: "Technology & Media", parts: [ { name: "Introduction & Interview", questions: [ "How often do you use technology in your daily life?", "Which device do you use most frequently?", "Do you follow the news? How do you access it?", "How has technology changed the way you communicate?", "Do you think people spend too much time on their phones?" ] }, { name: "Individual Long Turn", questions: [ "Describe a piece of technology that you find useful. You should say:\n- what this technology is\n- how often you use it\n- what you use it for\n- and explain why you find it useful." ] }, { name: "Two-way Discussion", questions: [ "How has technology changed education?", "Do you think social media has more positive or negative effects on society?", "How might artificial intelligence affect our lives in the future?", "Is it possible to live without modern technology nowadays?" ] } ] }, // Set 6: Health & Lifestyle { name: "Health & Lifestyle", parts: [ { name: "Introduction & Interview", questions: [ "Do you exercise regularly? What kind of exercise do you do?", "How important is healthy eating to you?", "Do you get enough sleep? Why or why not?", "What do you do to relax when you feel stressed?", "How would you describe a healthy lifestyle?" ] }, { name: "Individual Long Turn", questions: [ "Describe a time when you had to stay healthy for an important event. You should say:\n- when this was\n- why you needed to be healthy\n- what you did to stay healthy\n- and explain how you felt about this experience." ] }, { name: "Two-way Discussion", questions: [ "Why do you think some people find it difficult to maintain a healthy lifestyle?", "How has people's understanding of health changed in recent years?", "Do you think governments should do more to promote public health?", "How might healthcare change in the future with new technology?" ] } ] }, // Set 7: Environment & Nature { name: "Environment & Nature", parts: [ { name: "Introduction & Interview", questions: [ "Do you enjoy spending time in nature?", "Are there any environmental problems in your area?", "What do you do to help protect the environment?", "Did you learn about environmental issues at school?", "Do you think people are more concerned about the environment now than in the past?" ] }, { name: "Individual Long Turn", questions: [ "Describe a place with beautiful natural scenery. You should say:\n- where this place is\n- how you know about this place\n- what the scenery is like\n- and explain why you think the scenery is beautiful." ] }, { name: "Two-way Discussion", questions: [ "What are the most serious environmental problems facing the world today?", "Do you think individuals can make a difference to environmental problems?", "How has industrialization affected the environment?", "What can governments do to protect natural resources?" ] } ] }, // Set 8: Culture & Traditions { name: "Culture & Traditions", parts: [ { name: "Introduction & Interview", questions: [ "What traditions are important in your culture?", "Do you enjoy traditional festivals and celebrations?", "Has globalization affected traditions in your country?", "What traditional foods do you like?", "Do you think it's important to preserve cultural traditions? Why or why not?" ] }, { name: "Individual Long Turn", questions: [ "Describe a traditional celebration in your country. You should say:\n- what the celebration is\n- when it takes place\n- what people do during this celebration\n- and explain why this celebration is important." ] }, { name: "Two-way Discussion", questions: [ "How do traditions differ between generations?", "What is the impact of immigration on cultural traditions?", "Do you think some traditions can be harmful?", "How can a society balance modernization with preserving traditions?" ] } ] }, // Set 9: Society & Relationships { name: "Society & Relationships", parts: [ { name: "Introduction & Interview", questions: [ "How important are friendships to you?", "What qualities do you value in a friend?", "How do you usually meet new people?", "Do you prefer having many casual friends or a few close friends?", "How do you stay in touch with friends who live far away?" ] }, { name: "Individual Long Turn", questions: [ "Describe a person who has been a good influence in your life. You should say:\n- who this person is\n- how you know them\n- how they have influenced you\n- and explain why you think they have been a good influence." ] }, { name: "Two-way Discussion", questions: [ "How have relationships changed with the rise of social media?", "What social problems are people most concerned about in your country?", "Do you think community spirit is stronger or weaker than in the past?", "What responsibilities do individuals have toward their communities?" ] } ] }, // Set 10: Goals & Achievements { name: "Goals & Achievements", parts: [ { name: "Introduction & Interview", questions: [ "What is a goal you are currently working towards?", "How do you motivate yourself to achieve your goals?", "Do you think it's important to set goals? Why?", "What achievement are you most proud of?", "Who has inspired you to achieve your goals?" ] }, { name: "Individual Long Turn", questions: [ "Describe an important goal you achieved. You should say:\n- what this goal was\n- how long it took to achieve\n- what difficulties you faced\n- and explain why achieving this goal was important to you." ] }, { name: "Two-way Discussion", questions: [ "Why do some people achieve their goals while others don't?", "How important is failure in achieving success?", "What types of goals do you think are most important in life?", "Do you think society puts too much pressure on people to achieve certain goals?" ] } ] } ]; let currentSetIndex = 0; let currentPartIndex = 0; let currentQuestionIndex = 0; let isRecording = false; let mediaRecorder; let audioChunks = []; let recognition; let startTime; let timerInterval; let waitingForNextQuestion = false; // DOM Elements const testContent = document.getElementById('testContent'); const startButton = document.getElementById('startButton'); const endButton = document.getElementById('endButton'); const timerDisplay = document.getElementById('timerDisplay'); const messageInput = document.getElementById('messageInput'); const sendButton = document.getElementById('sendButton'); const testSelector = document.getElementById('testSelector'); // Update question set when selector changes testSelector.addEventListener('change', function() { currentSetIndex = parseInt(this.value); resetTest(); displayWelcomeMessage(); }); // Format time for display (mm:ss) function formatTime(seconds) { const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; return `${minutes}:${remainingSeconds < 10 ? '0' : ''}${remainingSeconds}`; } // Update timer display function updateTimer() { const elapsed = Math.floor((Date.now() - startTime) / 1000); timerDisplay.textContent = formatTime(elapsed); } // Get current question function getCurrentQuestion() { const set = testQuestionSets[currentSetIndex]; const part = set.parts[currentPartIndex]; return part.questions[currentQuestionIndex]; } // Get current part name function getCurrentPartName() { return testQuestionSets[currentSetIndex].parts[currentPartIndex].name; } // Reset test to beginning function resetTest() { currentPartIndex = 0; currentQuestionIndex = 0; waitingForNextQuestion = false; } // Move to next question function moveToNextQuestion() { const currentPart = testQuestionSets[currentSetIndex].parts[currentPartIndex]; // If there are more questions in this part if (currentQuestionIndex < currentPart.questions.length - 1) { currentQuestionIndex++; return true; } // If there are more parts in this set else if (currentPartIndex < testQuestionSets[currentSetIndex].parts.length - 1) { currentPartIndex++; currentQuestionIndex = 0; return true; } // End of test else { return false; } } // Start recording function function startRecording() { if (isRecording) return; isRecording = true; startButton.textContent = 'Stop'; startButton.classList.remove('bg-primary', 'hover:bg-blue-600'); startButton.classList.add('bg-red-500', 'hover:bg-red-600'); startTime = Date.now(); timerInterval = setInterval(updateTimer, 1000); // Add current question to the display const questionHTML = `
Part ${currentPartIndex + 1}: ${getCurrentPartName()}

Question ${currentQuestionIndex + 1}

${getCurrentQuestion()}

`; testContent.innerHTML += questionHTML; testContent.scrollTop = testContent.scrollHeight; // Initialize speech recognition recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)(); recognition.lang = 'en-US'; recognition.interimResults = true; recognition.continuous = true; recognition.start(); const responseTextDiv = testContent.querySelector('.question-container:last-child .response-text'); recognition.onresult = function(event) { const transcript = Array.from(event.results) .map(result => result[0].transcript) .join(''); responseTextDiv.textContent = transcript; }; recognition.onerror = function(event) { console.error('Speech recognition error', event); stopRecording(); }; // Initialize audio recording navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { mediaRecorder = new MediaRecorder(stream); mediaRecorder.start(); audioChunks = []; mediaRecorder.ondataavailable = function(e) { audioChunks.push(e.data); }; mediaRecorder.onstop = function() { const audioBlob = new Blob(audioChunks, { type: 'audio/mp3' }); audioChunks = []; appendRecordingResult(audioBlob); }; }) .catch(err => { console.error("Error accessing microphone:", err); stopRecording(); }); } // Stop recording function function stopRecording() { if (!isRecording) return; isRecording = false; startButton.textContent = 'Start'; startButton.classList.remove('bg-red-500', 'hover:bg-red-600'); startButton.classList.add('bg-primary', 'hover:bg-blue-600'); clearInterval(timerInterval); if (mediaRecorder) { mediaRecorder.stop(); } if (recognition) { recognition.stop(); } } // Evaluate speaking using AI async function evaluateSpeaking(transcript) { const responseContainer = testContent.querySelector('.question-container:last-child .response-container'); // Add a loading state const evaluationContainer = document.createElement('div'); evaluationContainer.className = 'mt-4 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg evaluation-container'; evaluationContainer.innerHTML = `

Evaluating your response...

`; responseContainer.appendChild(evaluationContainer); // After a small delay, show the container with animation setTimeout(() => { evaluationContainer.classList.add('show'); }, 100); // Instructions for AI evaluation const systemPrompt = ` You are an IELTS speaking examiner. Evaluate the candidate's response for an IELTS speaking test. Provide band scores (0-9, can use half bands like 6.5) and brief comments for each of these criteria: 1. Fluency and coherence 2. Lexical resource 3. Grammatical range and accuracy 4. Pronunciation Make sure to penalize too short responses. Must be at least 100 words long. For refernce, for parts 1 and 3, to secure band 9, the candidate's response should be around 150 words, use at least 3 less common or topic-specific words, use a minimum of 3 different grammatical structures, have at least 90% grammatical accuracy with minimal errors. For part 2, to secure band 9, the candidate's response should be around 300 words, use at least 6 less common or topic-specific words, use a minimum of 6 different grammatical structures, have at least 90% grammatical accuracy with minimal errors. Then provide an overall band score and 2-3 sentences of constructive feedback. Only return a JSON object with this structure: { "fluency": {"score": 0.0, "comment": ""}, "lexical": {"score": 0.0, "comment": ""}, "grammar": {"score": 0.0, "comment": ""}, "pronunciation": {"score": 0.0, "comment": ""}, "overall": 0.0, "feedback": "" } `; try { const response = await fetch("https://openrouter.ai/api/v1/chat/completions", { method: "POST", headers: { "Authorization": "Bearer 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", "HTTP-Referer": window.location.href, "X-Title": "IELTS Speaking Mock Test", "Content-Type": "application/json" }, body: JSON.stringify({ "model": "qwen/qwen-2-7b-instruct:free", "messages": [ { role: "system", content: systemPrompt }, { role: "user", content: `Question: ${getCurrentQuestion()}\n\nCandidate's response: ${transcript}` } ] }) }); const data = await response.json(); let evaluation; try { // Try to parse the response as JSON directly const content = data.choices[0].message.content; evaluation = JSON.parse(content); } catch (e) { // If parsing fails, extract JSON from the response using regex const content = data.choices[0].message.content; const jsonMatch = content.match(/{[\s\S]*}/); if (jsonMatch) { evaluation = JSON.parse(jsonMatch[0]); } else { throw new Error("Could not parse evaluation JSON from response"); } } displayEvaluation(evaluation, evaluationContainer); } catch (error) { console.error('Error evaluating speaking:', error); evaluationContainer.innerHTML = `

Error evaluating your response. Please try again.

`; } } // Display evaluation results // Display evaluation results function displayEvaluation(evaluation, container) { // Map scores to colors function getScoreColor(score) { if (score >= 8) return 'text-green-600 dark:text-green-400'; if (score >= 6.5) return 'text-blue-600 dark:text-blue-400'; if (score >= 5) return 'text-yellow-600 dark:text-yellow-400'; return 'text-red-600 dark:text-red-400'; } // Calculate overall score as average of individual scores, rounded to nearest 0.5 function calculateOverallScore(eval) { const scores = [ eval.fluency.score, eval.lexical.score, eval.grammar.score, eval.pronunciation.score ]; // Calculate average const average = scores.reduce((sum, score) => sum + score, 0) / scores.length; // Round to nearest 0.5 const roundedScore = Math.round(average * 2) / 2; return `${roundedScore.toFixed(1)}`; } container.innerHTML = `

IELTS Band Score Evaluation

Fluency & Coherence

${evaluation.fluency.score}

${evaluation.fluency.comment}

Lexical Resource

${evaluation.lexical.score}

${evaluation.lexical.comment}

Grammar

${evaluation.grammar.score}

${evaluation.grammar.comment}

Pronunciation

${evaluation.pronunciation.score}

${evaluation.pronunciation.comment}

Overall Band Score

${calculateOverallScore(evaluation)}

${evaluation.feedback}

`; // Add event listener to the next question button container.querySelector('.next-question-btn').addEventListener('click', function() { // Don't move to next question immediately, just flag that we're ready for the next one // and enable the start button waitingForNextQuestion = true; startButton.disabled = false; startButton.classList.remove('opacity-50', 'cursor-not-allowed'); // If this was the last question in the test if (!hasMoreQuestions()) { // End of test testContent.innerHTML += `

Test Completed

You've completed the IELTS speaking practice for ${testQuestionSets[currentSetIndex].name}.

Select another topic from the dropdown to continue practicing.

`; testContent.scrollTop = testContent.scrollHeight; // Reset for next test resetTest(); } }); } // Check if there are more questions left function hasMoreQuestions() { const currentPart = testQuestionSets[currentSetIndex].parts[currentPartIndex]; // If there are more questions in this part or more parts return (currentQuestionIndex < currentPart.questions.length - 1) || (currentPartIndex < testQuestionSets[currentSetIndex].parts.length - 1); } // Append recording results to the UI function appendRecordingResult(audioBlob) { const elapsedTimeSeconds = Math.floor((Date.now() - startTime) / 1000); const timeUsed = formatTime(elapsedTimeSeconds); const responseTextDiv = testContent.querySelector('.question-container:last-child .response-text'); const transcript = responseTextDiv.textContent; const wordCount = transcript.trim().split(/\s+/).length; const wordsPerMinute = wordCount / (elapsedTimeSeconds / 60); const responseContainer = testContent.querySelector('.question-container:last-child .response-container'); const statsHTML = `
Time: ${timeUsed} Words: ${wordCount} Speed: ${wordsPerMinute.toFixed(1)} WPM
`; responseContainer.innerHTML += statsHTML; testContent.scrollTop = testContent.scrollHeight; // Disable the start button while we evaluate startButton.disabled = true; startButton.classList.add('opacity-50', 'cursor-not-allowed'); // Evaluate the response evaluateSpeaking(transcript); // Reset timer display timerDisplay.textContent = '0:00'; } // Event listeners startButton.addEventListener('click', function() { if (isRecording) { stopRecording(); } else { // If we're waiting for the next question, move to it first if (waitingForNextQuestion) { moveToNextQuestion(); waitingForNextQuestion = false; } startRecording(); } }); endButton.addEventListener('click', function() { stopRecording(); // Add a test completion message testContent.innerHTML += `

Test Ended

You've ended the speaking practice session.

Select another topic from the dropdown to continue practicing or click 'Start' to begin with the next question.

`; testContent.scrollTop = testContent.scrollHeight; // Reset for next test resetTest(); }); // Handle sending messages sendButton?.addEventListener('click', function() { if (messageInput.value.trim() === '') return; const messageText = messageInput.value; testContent.innerHTML += `
${messageText}
`; // Clear input field messageInput.value = ''; // Auto-respond with next question setTimeout(() => { testContent.innerHTML += `
${getCurrentQuestion()}
`; testContent.scrollTop = testContent.scrollHeight; }, 1000); }); messageInput?.addEventListener('keypress', function(e) { if (e.key === 'Enter') { sendButton.click(); } }); // Display welcome message function displayWelcomeMessage() { testContent.innerHTML = `
Welcome to the IELTS Speaking Mock Test!

You've selected: ${testQuestionSets[currentSetIndex].name}

This test has three parts, just like the real IELTS exam:
• Part 1: Introduction & Interview (short questions)
• Part 2: Individual Long Turn (speaking for 1-2 minutes)
• Part 3: Two-way Discussion (more abstract questions)

Click "Start" when you're ready to begin with Part 1.
`; } // Initialize with a welcome message window.addEventListener('load', function() { displayWelcomeMessage(); });

Leave a Reply

Your email address will not be published. Required fields are marked *