我使用业力和茉莉作为我的测试框架。这是我的代码:
it('add() should add x to the reply object', function() {
spyOn(ctrl, 'addxReply');
ctrl.reply = {};
ctrl.reply.post = 'test post';
ctrl.add();
expect(ctrl.addxReply).toHaveBeenCalled();
console.log(ctrl.reply);
expect(ctrl.reply).toContain('x');
});
这是我的ctrl.add():
self.add = function() {
self.reply['x'] = self.posts[0].id;
self.addxReply();
};
问题是,当我运行代码时,这就是它返回的内容:
LOG: Object{post: 'test post', x: undefined}
Chromium 48.0.2564 (Ubuntu 0.0.0) Controller: MainCtrl add() should add x to the reply object FAILED
Expected Object({ post: 'test post', x: undefined }) to contain 'x'.
正如您所看到的,我的回复对象确实包含x
,但行expect(ctrl.reply).toContain('x');
仍然失败。知道如何正确验证我的对象是否包含x
?
答案 0 :(得分:1)
您在创建的内容与预期内容中存在错误。注意这一行:
self.reply['x'] = self.posts[0].id;
它希望ctrl
具有属性“posts”,这是一个具有索引0
且具有名为id
的属性的数组。 其中每一个条件都失败
您改为在ctrl属性reply
下定义了一个奇异属性(不是数组):
ctrl.reply.post
您需要更改测试代码:
it('add() should add x to the reply object', function() {
spyOn(ctrl, 'addxReply');
ctrl.reply = {};
//ctrl needs an array named "posts" with one index
//containing an object with an "id" property
ctrl.posts = [ { "id": 'test post' } ];
ctrl.add();
expect(ctrl.addxReply).toHaveBeenCalled();
console.log(ctrl.reply);
expect(ctrl.reply).toContain('x');
});