В настоящее время я создаю игру Rock, Paper, Scissors в Javascript и использую TDD для руководства своим кодом. Я пытаюсь запустить тест Жасмин, который заставляет одну из моих функций вернуть установленное значение. Я хочу, чтобы моя функция «compChoice» возвращала случайный элемент из массива «choice» [«Rock», «Paper», «Scissors»], и в моем тесте вы хотите установить это «Rock». Мои тесты ниже.Функция spyOn в Jasmine, которая возвращает случайный элемент из массива
describe("Game", function() {
var game;
beforeEach(function(){
game = new Game();
});
describe('user choice', function(){
it('should equal the choice the user selected', function(){
game.userSelect("Rock");
expect(game.userChoice).toEqual("Rock")
});
})
describe('draw', function(){
it('should equal true if user choice and comp choice are the same', function() {
game.userSelect("Rock");
spyOn(game,'compChoice').and.returnValue("Rock");
expect(game.opponentChoice).toEqual("Rock")
// expect(game.draw).toEqual(true);
});
})
});
Я могу сказать, что есть что-то не так с моей spyOn, как мой тест возвращается с «Ожидаемая„“в равной„Rock“.»
Я не знаю, почему он не звонит шпиону и устанавливает значение «Рок», как я и спросил.
Мой фактический код внизу для справки:
function Game() {
this.choices = ["Rock","Paper","Scissors"];
this.userChoice = "";
this.opponentChoice = "";
}
Game.prototype.userSelect = function(choice){
this.userChoice = choice;
}
Game.prototype.compChoice = function(){
this.opponentChoice = this.choices[Math.floor(Math.random()*this.choices.length)];
return this.opponentChoice;
}
был ли этот ответ полезным для вас? –
Извините за отсутствие ответа Артур и благодарю вас за ответ! Я был так неспособен ответить. Я попытался выполнить то, что вы рекомендовали, и вызвал функцию compChoice() после Spy, и она не сработала. Когда я console.log (game.opponentChoice) ничего не возвращает, когда я ожидал, что Rock будет возвращен из-за SpyOn. –
Я отредактировал свой предыдущий ответ с объяснением, почему он не работает –