控制台日志记录对象值

Console logging object values

作为我参加的训练营的一部分,我被要求创建一个在线购物车。 我在 addToCart 函数方面遇到了这样的问题,因为我一直设法控制台日志 [{itemName: item, itemPrice: 8}] 而不是“项目已添加到购物车。

我认为我的问题出在我的模板文字上。

目的是让函数接受一个项目,围绕它创建一个对象,应用其他属性,添加到购物车数组,控制台记录该项目已被添加(这就是我的问题所在)然后return购物车。

我尝试了多种替代方法,例如尝试通过点表示法访问值以及使用对象的键来访问值。还是没有快乐。

下面是我的代码:

function addToCart(item) {
  // write your code here
  var price = Math.floor(Math.random() * 100) + 1;
  var obj = {itemName: item, itemPrice: price};
  cart.push(obj);
  console.log(`${item} has been added to your cart.`)
  return cart;
}

我期望的是被解析到函数中的项目将记录到控制台,说明该项目已添加。我相信其余代码工作正常,因为它通过了本地测试。

我得到的错误是这样的:

错误:预期 [{itemName:'ice cream', itemPrice: 26}] 等于 'ice cream has been added to your cart.'

任何提示都会很有帮助。

您需要将购物车定义为全局变量。请检查以下代码片段。

cart = [];

(function() {
   addToCart("Apple");
   addToCart("Orange");
   
   console.log(this.cart)
})();

function addToCart(item) {
  var price = Math.floor(Math.random() * 100) + 1;
  var obj = {itemName: item, itemPrice: price};
  this.cart.push(obj);
  console.log(`${item} has been added to your cart.`)
  return cart;
}

看着您遇到的错误,我觉得 错误是由测试引发的 您是 运行。

该测试正在检查您的函数返回的值,而不是控制台中记录的内容。为了不再出现错误,您应该修复该测试。

假设您的测试使用 Jasmine,该测试将类似于:

const cart = addToCart(item);
expect( cart[0]['itemName'] ).toBe('ice cream')

我看了你的测试,

尝试关注

你的测试是(我希望我选对了):

it("returns a message indicating that the item has been added", function() {
    expect(addToCart("ice cream")).toEqual("ice cream has been added to your cart.");

    expect(addToCart("juice")).toEqual("juice has been added to your cart.");
  });

将您的代码更改为:

function addToCart(item) {
  // write your code here
  var price = Math.floor(Math.random() * 100) + 1;
  var obj = {itemName: item, itemPrice: price};
  cart.push(obj);
  console.log(`${item} has been added to your cart.`)
  return `${item} has been added to your cart.`;
  //OR
  //return `${obj.itemName} has been added to your cart.`;
}

当您将测试中来自 "addToCart" 的 returned 值与 .toEqual 中的字符串进行比较时,因此您应该 return 来自函数的特定格式化字符串。

因此,而不是 returning cart,您应该 return 您想要的 特定字符串 检查。