2017-07-27 81 views
0

我有一个简单的函数修改我的app.component.ts中的参数,我想用间谍测试函数。我的changeText函数总是未定义出于某种原因,我在做什么错?角4茉莉间谍单元测试“预计未定义为'新文本'

AppComponent.ts

export class AppComponent { 
    text = "My text"; 

    changeText = function() { 
     this.text = "New text"; 
     return this.text; 
    } 
} 

AppComponent.spec.ts

describe("my text with Spies", function() { 
     it("should be altered", function() { 
     const fixture = TestBed.createComponent(AppComponent); 
     const app = this.fixture.debugElement.componentInstance; 

     spyOn(app, 'changeText'); 

     expect(app.text).toBe("My text")  
     expect(app.changeText()).toBe("New text");   //Fails 
     expect(app.changeText).toHaveBeenCalledTimes(1); 
    }); 
}); 
+0

请告诉我的错误? – onetwo12

+0

规范失败,错误“预期未定义为'新文本'因此,changeText的输出由于某种原因未定义。 – kikilolohu

+0

也许引用此:https://stackoverflow.com/questions/35987055/how-to-write-unit -testing-for-angular-2-typecript-for-private-methods-with-ja?rq = 1可能是一个范围界定问题 – rcheuk

回答

1

尝试添加这种改变如果这实际上仍然

更改此:

expect(app.changeText()).toBe("New text"); 
expect(app.changeText).toHaveBeenCalledTimes(1); 

到:

app.changeText(); 
expect(app.text).toBe("New text"); 
expect(app.changeText).toHaveBeenCalled(); 
+0

看起来不错,但是你可以在编辑时详细说明为什么这样可以解决问题吗 – Rumid

+1

是的,因为你的changeText()方法改变了this.text,所以你应该检查这个文本,你也可以编写const text = app.changeText()然后expect(text).toBe(“New text”)。想要检查返回值 –

+0

我的意思是把这个添加到你的答案中,一般试图描述一下应该帮助的代码,它是做什么的,为什么OP的代码不起作用等等 – Rumid