Angular ng-class 呈现正确的类,但 Karma 显示错误
Angular ng-class renders correct class but Karma shows ERROR
我试图超越《AngularJS - Up and Running》一书中给出的示例,并以HTML格式呈现结果。原始代码可以在这里找到:书籍示例(控制器.js和控制器规范.js
问题是,如果我使用此代码,Karma 会显示 SUCCESS,但 HTML 中的类不会按预期呈现(所有帖子都显示一个类".read",就好像两者都是"read = true;"):
angular.module('blogApp', [])
.controller('MainCtrl', [function() {
var self = this;
self.items = [
{title: 'First post', read: false},
{title: 'Last post', read: true}
];
self.getPostClass = function(status) {
return {
read: status.read,
pending: !status.read
};
};
}]);
但是,如果我将返回值更改为:
return {
read: status,
pending: !status
};
它加载了正确的类,但 Karma 显示存在错误。喜欢这个:
Chromium 39.0.2171 (Ubuntu) Controller: MainCtrl should have highlight items based on state FAILED
Expected { title: 'Last post', read: false } to be falsy.
at Object.<anonymous> (/home/estevan/teste/js/scriptSpec.js:28:30)
Expected false to be truthy.
at Object.<anonymous> (/home/estevan/teste/js/scriptSpec.js:29:33) Chromium 39.0.2171 (Ubuntu): Executed 2 of 2 (1 FAILED) (0.023 secs / 0.021 secs)
这是 HTML:
<!DOCTYPE html>
<html lang="en" ng-app="blogApp">
<head>
<meta charset="UTF-8">
<title>Blog App</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body ng-controller="MainCtrl as ctrl">
<div ng-repeat="post in ctrl.posts"
ng-class="ctrl.getPostClass(post.read)">
<h1>{{post.title}}</h1>
<!-- It used to have an author -->
<p ng-show="post.author"
ng-bind="post.author">
</p>
</div>
<script src="js/angular.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>
这是测试(scriptSpec.js):
describe('Controller: MainCtrl', function() {
// Instantiate a new version o my module before each test
beforeEach(module('blogApp'));
var ctrl;
// Before each unit test, instantiate a new instance of the controller
beforeEach(inject(function($controller) {
ctrl = $controller('MainCtrl');
}));
it('should have items available on load', function() {
expect(ctrl.posts).toEqual([
{title: 'First post', read: false},
{title: 'Last post', read: true}
]);
});
it('should have highlight items based on state', function() {
var post = {title: 'Last post', read: true};
var actualClass = ctrl.getPostClass(post);
expect(actualClass.read).toBeTruthy();
expect(actualClass.pending).toBeFalsy();
post.read = false;
actualClass = ctrl.getPostClass(post);
expect(actualClass.read).toBeFalsy();
expect(actualClass.pending).toBeTruthy();
});
});
出了什么问题?
那是因为你在帖子中传递的是{标题:"最后一篇文章",读作:假}。这使得你的返回值成为第二个:
actualClass = {
read: {title: 'Last post', read: false},
pending: false
}
正因为如此
expect(actualClass.read).toBeFalsy();
显然会失败,因为 actualClass.read 是一个对象。与:
expect(actualClass.pending).toBeTruthy();
因为 actualClass.pending 是假的。
要了解我的意思,请在每个实际类 = 之后放入控制台日志,如下所示:
it('should have highlight items based on state', function() {
var post = {title: 'Last post', read: true};
var actualClass = ctrl.getPostClass(post);
console.log(actualClass);
expect(actualClass.read).toBeTruthy();
expect(actualClass.pending).toBeFalsy();
post.read = false;
actualClass = ctrl.getPostClass(post);
console.log(actualClass);
expect(actualClass.read).toBeFalsy();
expect(actualClass.pending).toBeTruthy();
});
相关文章:
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何在生成下载文件时显示加载动画
- React重新渲染但未显示正确的组件
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 音频控件在mouseover上显示,在mouseout上淡出
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 显示5秒后隐藏潜水
- 画廊图像未显示
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 高亮显示时编辑文本大小和颜色
- 有时数据是't显示在浏览器中
- Angular ng-class 呈现正确的类,但 Karma 显示错误
- Karma堆栈显示javascript行号,而不是coffescript
- 有没有一个karma插件可以突出显示jasmine测试覆盖(或未覆盖)的Javascript代码